A storefront that delivers what it sells
Two languages, three currencies, and payment webhooks that issue the licence without anyone in the loop.
Context & problem
Selling software to an international audience is mostly the parts that are not the shop: signing in without another password to forget, taking money in the currency the buyer thinks in, turning a completed payment into a licence the buyer can actually use, and answering them when it goes wrong. The storefront is the small half. The webhook that hears a payment and issues a licence is the half that has to be right.
Role
Sole developer.
Constraints
- Two languages and three currencies, throughout.
- A payment webhook is called by a stranger, so it is verified before it is believed.
- Frontend and API deploy separately.
Decisions & why
- A workspaces monorepo with the frontend and the API as separate applications.
- One lockfile and one install, two deployables. They share types without sharing a deployment.
- Sign-in delegated to an existing identity the customers already have.
- No password to store, and the account that buys is the account that gets support.
What it does now
The frontend is complete and the backend is implemented; checkout and sign-in are wired and waiting on credentials.
Stack
- React 18
- Vite 6
- Tailwind 4
- Fastify 5
- Prisma
- PostgreSQL