Local development & configuration
TypeScript, pnpm, Turbo and HTTPS localhost.
Start the stack
pnpm install
pnpm dev:trust
pnpm db:generate
pnpm db:start
pnpm db:migrate
pnpm devPrerequisites: Node 24.13+, pnpm 9.12.3, Caddy, Docker, authenticated Infisical and approved development AWS access. Turbo runs the apps and Storybook behind Caddy.
| Surface | Local origin |
|---|---|
| Marketing | https://versine.localhost |
| Console | https://console.versine.localhost |
| My | https://my.versine.localhost |
| Auth | https://auth.versine.localhost |
| API | https://api.versine.localhost |
| Docs | https://docs.versine.localhost |
| Storybook | https://storybook.versine.localhost |
Secrets versus configuration
Origins, bucket/region, Clerk publishable keys and Expo project IDs are public
configuration. They do not belong in a secret store. Never expose Clerk secret
keys, OIDC private keys, cookie/encryption keys, client secrets or push service
credentials as NEXT_PUBLIC_, VITE_ or EXPO_PUBLIC_ values.
The runtime wrapper loads Infisical dev /server only for the backend.
Frontends receive only public values. Existing legacy Infisical folders are not
the current runtime source. Avoid plaintext .env exports.
Production secrets must be injected at runtime into the approved deployment. Infisical→AWS synchronization is an operator step, not an install/build side effect. The fallback script requires an existing secret ARN and explicit account/region verification. Production topology and DNS are separate decisions.
Application boundaries
Fastify serves internal tRPC under /trpc. Console/My (and Mobile) use inferred
AppRouter types with TanStack Query. OAuth/OIDC, MCP, public REST and webhooks
are separate protocols, never tRPC.
Run tests only against a separate _test PostgreSQL database. The development
database on port 55433 is persistent; do not reset or reuse it as a test fixture.
See verification.
UI
Use shared shadcn base-lyra components from packages/ui, Matter headings, Mona
Sans body text and the shared −2% letter-spacing token. New shadcn primitives need
autodocs stories. Apps do not copy fonts or override typography tracking.