Orchestration lives in halort-infra. Ports come from scripts/stack-config.cjs.
One-time setup
cd halort-infra && npm install # also installs sibling deps via setup
cd ../halort-platform && cp .env.example .env
bun install && bun run db:generate && bun run db:push && bun run db:seed
cd ../halort-platform-web && cp .env.example .env.local && npm install
# Optional notifications: cd ../halort-notification-service && npm run setup:localStart the core stack
cd halort-infra
npm run dev # web :3000, API :4000, platform-web :3001, Storybook :6006
npm run dev:gp2 # same + GP2 tenant → http://localhost:3001/pasar
npm run dev:notifications # optional :8090Platform-web waits for http://127.0.0.1:4000/api/health before becoming ready.
Local URLs
| Service | URL |
|---|---|
| Marketing | http://localhost:3000 |
| Platform web | http://localhost:3001 |
| API health / Swagger | http://localhost:4000/api/health · /swagger |
| Storybook | http://localhost:6006 |
| Notifications | http://127.0.0.1:8090/health |
| Docs (Quartz) | cd halort-docs && npx quartz build --serve → :8080 |
Optional subdomain hosts
127.0.0.1 halort.test gp2.halort.test
Set HALORT_DOMAIN=halort.test (and related central-domain env) on API/web for subdomain tenancy. See Multi-tenancy · Concepts/Pasar GP2.