Charming Seal

Charming Seal·Contact

Three ways to reach us. Pick the right one.

Charming Seal is free software with nobody staffing a desk behind it. That makes the channel you choose matter more than it usually would. Sent to the right place, a message gets read and acted on.

Where to write

What belongs in each, and what it costs to guess.

A bug sent to the inbox moves slower. A security hole sent to the issue tracker puts other people's shops at risk.

I · BUGS AND REQUESTS

Open an issue on the repo

Anything reproducible belongs in the issue tracker on the GitHub repo: a route that errors, a webhook that never lands, a setting that will not save. Feature requests go there too, in the open, where somebody else can agree with you or send the patch. Search the closed issues first. Expect it to be read, and fixed when there is time to fix it.

II · SECURITY

Report it privately. Never in public.

Use the private route in SECURITY.md. Do not open an issue, and do not post it anywhere else first. Every copy of this software runs on somebody's own server, so a payment bug made public before there is a fix is a bug published against every shop running that version, including the ones with nobody watching. Give the fix a chance to ship first.

III · EVERYTHING ELSE

hello@charmingseal.com

Press, licensing, legal, privacy requests, sponsorship, and anything that does not fit the other two. It is the one address for all of it, and there is no desk behind it. Say what you want in the first two lines and it stands a better chance of a reply.

Before you write

The answer is often already written down.

Three places worth a look. Between them they cover most of what arrives in the inbox.

How it worksInstalling it, the environment values it needs, deploying, and taking a first order in Stripe test mode.
API docsEvery route, the Authorization header, and where a shop's API keys are made.
The repositoryThe README on what ships today and how to run it locally, plus the issues somebody may have filed before you.

If it is a bug, paste these four lines in.

What I ran       the command, and the page or route I opened
What happened    the exact error text, copied, not paraphrased
Node version     node -v      (20 and 22 are the supported ones)
Stripe mode      test or live

A report with those four lines can be diagnosed. One that says it does not work cannot. Screenshots help. So does saying what you expected to happen instead.

What to expect

The terms, said once and plainly.

There is no support contract, and no queue with your ticket in it. This is MIT licensed software maintained in the hours somebody has. Replies happen when they happen. Some do not happen at all, and a public issue that anyone can find and answer will usually beat an email for that reason.

If your shop needs somebody contractually obliged to pick up the phone at three in the morning, pay a hosted platform for that. It is a fair thing to want, and this is the honest trade for keeping the fees and the data.

Nobody here can get into your shop. It runs on your host, your database and your Stripe account, under credentials only you hold. There is no console on this side and no back door. A lost password, a missing order or a refund that will not go through is between you, your own deployment and Stripe. Writing to us cannot move it along, because there is nothing on this end to press.

Start at the source

Most conversations begin in the code.

The repository holds the issue tracker, the security policy and the licence. It is also the quickest way to find out whether the thing you noticed is already known.