Getting Started
pnpm dev:local brings up 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. Plain pnpm docker:up/pnpm dev keep default ports. Source: …/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.