Codebase
Customization
Brand a Site, create a vertical Recipe, and extend V03 without weakening contracts.
Brand a Site
Use /admin/settings for name, wordmark, tagline, description, color, author, social links, footer copy, analytics, and product display price. Use /admin/sites for canonical Host and Recipe binding. Build-time environment values are fallbacks and deployment identity, not a second mutable content store.
Replace static application icons and default Open Graph assets only when the visual identity requires it. Workflow Open Graph images are generated dynamically from safe same-origin or R2 assets.
Create a vertical
A vertical Site Recipe declares:
- Brand defaults and supported Dimension types.
- Page templates and route patterns.
- Versioned datasource contracts with rights and deletion policy.
- Prompt, schema, and policy package references with SHA-256 digests.
- Engine compatibility and minimum build.
Recipe JSON cannot contain code, functions, inline credentials, or unlicensed data. Import creates a private draft; review and publication are separate actions.
Extend the data model
Use Link.attributes for versioned vertical-specific fields. Do not add every industry's transient fields to the static Tool model.
A new Site-owned table must include siteId, a Site foreign key, forced RLS, Site-scoped unique keys, and cross-Site negative tests. Relations between Site-owned entities use composite foreign keys that include siteId.
Add a write path
Every new write path must:
- Authenticate and authorize the subject against
SiteMembershipor a Site-bound API key. - Validate a strict, bounded schema.
- Enforce lifecycle, evidence, rights, cost, and approval policy.
- Commit the business write, ActionLedger entry, and required Outbox event in one transaction.
- Revalidate only affected public surfaces.
- Add success, validation, cross-Site, replay, and race tests.
Do not use logAudit after a committed write, direct global Prisma mutations for Site tables, or prisma db push.
Demo Sites
The production stack contains commerce, education, and health Demo Sites with synthetic data and distinct domains. They demonstrate Recipe-driven branding and isolation inside one buyer deployment. The health Demo is navigation-only, states that it is not medical advice, and must not accept real health data.