Start hereUpdated 2026-08-20
Project structure
Find the product routes, domain modules, provider adapters, content, migrations, tests, and delivery tooling.
Top-level directories
text
content/ typed blog, legal, changelog, and docs content
docs/ repository-side architecture and acceptance records
drizzle/ generated D1 migrations
messages/ Paraglide source messages
scripts/ setup, email preview, and E2E orchestration
src/ product and server source
tests/ unit and Playwright acceptanceDomain modules
text
src/
├── activity/ durable activity stream
├── admin/ user and waitlist administration
├── ai/ TanStack AI service and local fallbacks
├── api-keys/ hashing, validation, usage, revocation
├── auth/ Better Auth server, client, and session helpers
├── billing/ normalized payments and entitlements
├── cache/ KV contract and adapter
├── dashboard/ dashboard aggregation
├── db/ Drizzle schema and D1 accessor
├── files/ user-owned R2 workflow
├── mail/ React Email templates and mail registry
├── newsletter/ Resend and Beehiiv registry
├── notification/ Discord and Feishu registry
├── payment/ Stripe, Creem, and Waffo registry
├── storage/ R2 storage adapter
└── waitlist/ position, referral, and status workflowRoutes and components
src/routes/contains page routes and server API handlers.src/components/layout/contains the public shell.src/components/app/contains the authenticated product shell.src/components/docs/contains the documentation shell and renderer.src/components/ui/contains reusable Base UI and Shadcn-compatible primitives.
Configuration and environment
src/config/website.tsis the central product configuration.src/env.tsparses public and server environment variables.wrangler.jsoncdeclares runtime bindings and custom domains.worker-configuration.d.tsis generated from Wrangler.
Tests
tests/unit/validates module contracts, security invariants, and CLI behavior.tests/e2e/validates public, authenticated, provider-preview, mobile, dark-mode, and accessibility workflows.
Generated files
Do not hand-edit generated route trees, Content Collections output, Drizzle metadata, or Worker binding types. Change their source configuration and run the corresponding generator instead.