About
A website built to be taken apart
This is not a product. It is a place to build one capability at a time — properly, with the reasoning written down — so that the knowledge transfers to real work afterwards.
Most learning projects fail in the same way. You follow a tutorial, the app works, and you are left unable to say which parts you understood and which parts you copied. The gap only shows up later, when something breaks and none of it is familiar.
So this project inverts the usual arrangement. Instead of one application that happens to use several technologies, it is a deliberate inventory of capabilities — each one recorded with the technology behind it, an honest status, and a note on the transferable idea it demonstrates. The smallest are isolated as Lab experiments; the larger ones ship as real sections of the site — shop, forum, newsletter, organizations — which is what makes them worth forking.
The constraint that keeps it honest is that a capability carries three separate facts: whether it is built, whether its provider is configured, and whether anyone has watched the real path succeed in production. Code that has never run against a real provider is Ready, not Live, and the remaining work is impossible to lose track of.
Growth is incremental by design. The Lab framework means a new experiment costs a component, a registry entry, and one line in the loader map — never a routing change or a refactor. That is the property that lets a sandbox keep accepting new ideas instead of calcifying after the third one.
Project shape
Where things live and why they live there.
src/appRoutes, layouts, and API endpoints. The folder structure is the URL structure.
src/components/uiDesign-system primitives — button, card, dialog, input. No business logic.
src/components/layoutHeader, footer, theme provider, shared page chrome.
src/experimentsOne folder per Lab experiment, plus the registry that indexes them.
src/libServer-side logic by domain: the database client, auth, mail, storage, commerce. Each domain keeps its pure rules in a rules.ts a unit test can import.
src/app/apiRoute Handlers, for whatever a browser or a third party must call by URL: webhooks, presign, the chat stream, the public API.
docsArchitecture notes, the capability inventory, and the development log.
Working principles
Label reality, not intent
A screen that looks finished and a screen that is finished are different things. Every capability carries a status, and generated data is always marked simulated — never active.
Small, reviewable steps
Each phase adds one coherent slice and leaves the application runnable. No big-bang rewrites, because you cannot learn anything from a change you cannot read.
Secure by default, not by memo
Secrets stay server-side, input is validated at the boundary, and known weaknesses are written down on the Stack page rather than quietly hoped over.
Own the important code
Dependencies earn their place. Radix is here because accessible focus management is genuinely hard; the components wrapping it live in this repo where they can be read and changed.
The roadmap is part of the product
Planned capabilities are listed inside the app rather than hidden in a backlog, so the distance between what exists and what is intended stays visible from any page.