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:local

Start 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 :8090

Platform-web waits for http://127.0.0.1:4000/api/health before becoming ready.

Local URLs

ServiceURL
Marketinghttp://localhost:3000
Platform webhttp://localhost:3001
API health / Swaggerhttp://localhost:4000/api/health · /swagger
Storybookhttp://localhost:6006
Notificationshttp://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.