What's inside
Nine capabilities, each of them in exactly one place. That is what makes a fix land in every product at once, and it is why the next product costs a manifest entry instead of another set of accounts. Grouped below by how much of it you will ever touch.
01
Runs before your code does
Four systems are already in the request path on the day you clone. Adding a product adds work to none of them, and fixing one fixes them all.
Multi-tenant core
src/proxy.tsA request arrives on a host. The proxy resolves the tenant, the brand, and the security headers before your code runs.
Shared auth
src/lib/authSign in once per product, MFA included. New products get auth by writing zero auth code.
Shared billing
src/lib/billingOne Stripe webhook serves every product. Subscriptions, one-time purchases, credits, and a test-mode harness that never touches real money.
Observability
src/lib/observabilityPostHog events, error boundaries, and an audit trail, wired once for every product.
02
Capabilities you call
Two things every product eventually wants, each with the expensive parts already dealt with.
- AI layer
src/lib/ai - One gateway client, model tiers instead of model names, and a usage ledger that logs every call, including the failed ones.
- Email
src/lib/distribution - Themed transactional email per brand. You will not write HTML email by hand.
03
Data, not code
A skin is a database row. A page is a markdown file. Neither one is a component you fork.
- White-label theming
core.brands - A brand is a database row. Three products in this repo wear three skins off the same components.
- Content
docs/ - Blog, changelog, and these docs are markdown files. This page you are reading ships in the repo.
04
What you actually write
A route group and a domain model. That is the product. Everything above is already wired, so adding one touches two shared files in the app, plus the tsconfig path, the exposed-schema list and the dev seed.
- src/lib/products.ts
- one manifest entry
- src/app/_products/register.ts
- one import and one call
If a new product needs a third change in shared code, that is the signal product logic is leaking into the chassis. The rule is enforced by lint, not by good intentions.
Three skins, one component kit
Identical markup in all three panels. The only difference is which row of core.brands supplied the tokens.
studio
cutlist
planer