Reference

Decisions

The architecture decision records, and the things deliberately not built.

Reversible-but-significant choices are recorded as ADRs in the repository. They live next to the code rather than being copied here, so there is one version of each decision rather than two that drift.

ADRDecision
0001Payments provider — Polar as Merchant of Record
0002Data layer — generated types, no ORM yet
0003Upstash Redis for distributed rate limiting
0004Distribution as a GitHub template repository
0005Nuxt Layers for feature organisation

Deliberately deferred

The absent things are choices too:

Drizzle ORM. Generated types already give end-to-end safety. Adopt an ORM when server-side query complexity actually demands it, not before.

Direct Stripe. Not available to sellers in every country the stack targets; Polar is a Merchant of Record, which also removes the tax-handling problem.

A monorepo. There is one deployable. A monorepo waits until a second app exists. In-repo Nuxt Layers are used for feature organisation — that is not the same thing.

Each of these is cheap to add later and expensive to carry now. That asymmetry is the whole argument.