Local development
Prereqs: Node LTS, pnpm, Docker.
pnpm installdocker compose -f infra/docker/compose.yaml up -d --wait # Postgres · Valkey · MinIO · Mailpitpnpm db:migratepnpm dev # api + web + worker via turbo- Web: http://localhost:3010 · API: http://localhost:3001 · Mailpit UI: http://localhost:8025
- Sign up locally; grab the verification link from Mailpit.
Verification ladder
Section titled “Verification ladder”pnpm lint && pnpm typecheck && pnpm testpnpm test:integration # needs the compose stackpnpm --filter @scopekite/web e2e # builds served by next start — run pnpm build firstpnpm build && pnpm check:apiPort conflicts: if another Postgres owns 5432, run the compose file with an override
mapping ScopeKite’s Postgres elsewhere and point DATABASE_URL /
TEST_DATABASE_URL / E2E_DATABASE_URL at it — the test harnesses read all three.
Test suites never share the development database:
- Integration tests create a disposable
scopekite_test_<timestamp>per run. - E2E uses a dedicated
scopekite_e2e, dropped and recreated bypnpm --filter @scopekite/db provision:e2e(whichpnpm --filter @scopekite/web e2eruns for you) so every run starts from an empty schema.
Setting E2E_DATABASE_URL explicitly opts out of the recreate: that database is
migrated but never dropped, because it is not one this repository owns.
Full details: README and TEST_STRATEGY.