SellstampAbout
One repo, and a written reason
for everything awkward in it.
Sellstamp is a platform for selling digital products — storefronts, checkout, licence keys, subscriptions and the fraud and tax machinery around them. It is built by a small team as a single codebase, and every decision that was not obvious was argued in writing before it was built.
The stack, in full
- Front end
- Next.js, TypeScript
- API
- Fastify, TypeScript
- Data
- PostgreSQL, Drizzle
- Queues
- Valkey / Redis, BullMQ
- Files
- S3-compatible object storage
- Shape
- One repo. A worker beside it.
No microservices. No Kubernetes. Nothing is extracted until it has to be.
What we are building
A merchant signs up, gets a storefront on a subdomain or their own verified domain, adds products, connects a payment provider they already have, and Sellstamp handles checkout, delivery and licensing. The products can be files, generated licence keys, serial keys from a pool you imported, subscriptions, or something in a box.
Paid as software, not as a cut
A monthly fee, not a percentage of your sales. Which is why a store with no products at all — a landing page, a local business site — is a perfectly valid store here, and every phase of the site builder has been tested as one.
Built for cross-border
Storefronts in four languages plus any you import yourself, VAT with reverse charge and OSS, a payment roster that reaches past cards into the rails people actually use in their own country, and prices you set per currency rather than convert.
Real money, from the first commit
Payments, licences, chargebacks and fraud. The bugs matter, so the review is real and the tests are the interesting kind — the ones that fail when a rule quietly stops being true.
How it gets decided
Every non-obvious choice in this codebase has a written decision record, and the first is dated 19 July 2026 — the day of the first commit. They are not documentation written afterwards: each one states the problem, the options, the choice, and — the part that matters — what the choice costs.
- A refusal is a decision too
- Many of those records exist to say no, and to say why in enough detail that the next person does not re-litigate it from scratch. A good number of them amend an earlier one, usually because the original reasoning turned out to carry a hidden premise. That is the system working rather than failing.
- The cost is always named
- “Ninety days of fraud signals means a dispute landing on day 100 finds nothing left.” “A buy link with no row behind it cannot be revoked.” “A merchant who holds an order pays their provider's fee if they refund it.” Every one of those sentences is in the product, on the page where it bites.
- Tests that assert the rule, not the code
- A theme that is another theme repainted cannot be added, because a test renders every one of them with the colours stripped and compares the structure. A design control with nothing behind it fails, because a test renders the store twice per token and asserts the page changed. Those are the tests worth having.
- Written for the reader who arrives later
- Including the ones who are us. The comments in this codebase explain why a thing is shaped the way it is, not what the next line does — because the second kind is already in the line.
What we will not do
The shortest way to understand a product is usually its refusals, so here are ours. Each is enforced in code rather than promised in a policy.
- We never hold your money
- A customer pays into your own provider account, on that account's terms. There is no Sellstamp balance, no payout schedule and no float. It costs us a business model other platforms have, and it means a bad week of ours cannot become a bad week of yours.
- Nothing automated decides against a customer
- Every fraud signal is a sentence a human reads. There is one exception — a card-testing burst, which is over before a flag could be read — and it cools down the attacker rather than the shop. There is no score anywhere in the product.
- No tracking of ours, and the merchant's stated plainly
- No Radar, no Sift, no MaxMind, no hosted fingerprinting, no analytics SaaS of ours and no geolocation of any kind. Our storefront analytics are consent-gated, anonymous by construction, and there is no per-visitor journey view because there is no function that returns one. A merchant can switch on Meta, TikTok and Google ad tags and Microsoft Clarity session recording for their own store; those are not behind a consent banner, and the privacy policy says exactly what each one receives.
- We do not run merchant JavaScript
- You can bring HTML and CSS through an allow-list. Not a script, in any form — a storefront takes card details, and a tag pasted from a forum would run on your customers rather than on you. Shopify does not do it either; Liquid is not a concession.
- We do not invent a number
- A tax rate we do not have resolves to out-of-scope, not to zero. A second currency is a price you typed, not a rate we applied. A revenue report groups by currency rather than summing across it. Every one of those is a place where a plausible guess would have been easier.
What we are honest about
Every page on this site is written against what the product actually does today. That is a rule with teeth: the payment-method list, the fraud thresholds and the API surface are all checked against the source by tests, so a page that lags the code fails the build rather than quietly misleading somebody.
What this does not do
- We are small, and not pretending otherwise. There is no sales floor, no 24/7 desk and no account manager waiting for you.
- The product is young. It is continuously deployed, there are no version numbers, and the changelog is the honest record of what has landed.
- Some of it is deliberately narrow. One payment provider bills subscriptions. There is no storefront search. Some things are absent because they have not earned their place yet, and the pages say which.
- Nothing here is a claim about customers, funding or scale, because those are the numbers marketing pages invent first.
Open a store and try it.
Everything on this page is in the product today. Connect a provider in test mode and put a real order through it before you decide.