Skip to content

Getting started

  • Node 26 (see .nvmrc) and pnpm 12
  • Docker — the local Supabase stack runs in containers
Terminal window
pnpm install
pnpm db:start # local Supabase: Postgres, Auth, Mailpit… (first run pulls images)
pnpm env:local # writes .env from the running stack
pnpm db:seed:dev # one user per role (local only)
pnpm dev # http://localhost:3000

Sign in with any of the local users — they exist only in your local database:

Email Password Role
admin@example.com admin123 Admin
editor@example.com editor123 Editor
user@example.com user123 Default user

pnpm db:seed:dev also restores their passwords and roles if you changed them while testing.

pnpm db:start applies the migrations and supabase/seed.sql. pnpm db:reset recreates the database from scratch (migrations, seed, local users, regenerated types).

Service URL
App (pnpm dev) http://localhost:3000
Supabase API http://127.0.0.1:54321
Postgres postgresql://postgres:postgres@127.0.0.1:54322/postgres
Supabase Studio http://127.0.0.1:54323
Mailpit — every auth email lands here http://127.0.0.1:54324
Docs (pnpm docs:dev) http://localhost:4321/

Only one local Supabase project can use these ports at a time. If another project’s stack is running, stop it first: pnpm exec supabase stop --project-id <other>.

Terminal window
pnpm typecheck && pnpm lint && pnpm test
pnpm test:e2e # builds, then runs the end-to-end suites against the local stack

CI runs the same checks on every pull request — see Testing.