Getting Started
pnpm dev:local brings up the stack on dynamic ports (sticky via gitignored .env.local): free-port alloc → Docker infra (--wait) → migrate → seed-if-empty → turbo run dev --env-mode=loose. Coexists with other local Docker projects; plain pnpm docker:up/pnpm dev keep default ports. Source: packages/dev-launcher/.
Port Reference
URLs are http://localhost:<port> unless noted.
| Service | Port |
|---|---|
| Web (CRM) / Portal / Docs | 3000 / 3001 / 3002 |
| API (tRPC) | 4000 |
| PostgreSQL | 5432 — postgres://zrm:zrm_dev@localhost:5432/zrm |
| Temporal gRPC / UI | 7233 / 8233 |
| Mailpit SMTP / UI | 1025 / 8025 |
| MinIO S3 / Console | 9000 / 9001 |
| Jaeger UI / OTLP traces | 16686 / 4318 |
| Drizzle Studio | 4983 — pnpm --filter @zrm/db db:studio |
No dev-session auto-injection — staff log in (admin@zrm.local / admin123 local seed; non-local sets SEED_STAFF_DEFAULT_PASSWORD) via POST /auth/login or magic link. Reseeding truncates sessions: a pre-reseed zrm_session cookie 401s silently (app loads, no data) until you clear cookies + re-login.