Skip to content
07

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