Local Development
Repo-wide gates
pnpm typecheck # tsc --build, per tsconfig.json's explicit references list
pnpm lint # eslint .
pnpm format:check # prettier --check .
pnpm test # vitest run
All four must pass before a PR merges. website/ (this docs site) is deliberately outside all
four — see Monorepo Layout.
Ports
| Service | Port |
|---|---|
| Web | 3022 |
| API | 4022 |
| PDF service | 4020 |
| Local Supabase | 5552x (direct Postgres 55522) |
Resetting a stuck local stack
pnpm supabase:reset
Stops Supabase, removes the supabase_db_offerly, supabase_edge_runtime_offerly, and
supabase_storage_offerly Docker volumes, and restarts. This is the standard fix for services
reporting unhealthy after an interrupted supabase start.
If you instead see supabase start is already running after stopping containers via Docker's
own UI (rather than supabase stop), run supabase stop once first — that clears the CLI's own
stale lock state even with no containers running — then supabase start.