ui/ outside Docker for fast frontend iteration.
Hybrid workflow (recommended)
make -C ... from repo root, or run make all-up from self-hosting/docker-compose.
Then run UI from ui/ with .env.local.
When backend/statesman remain in Docker, set UI service URLs to host ports:
ORCHESTRATOR_BACKEND_URL=http://localhost:3000STATESMAN_BACKEND_URL=http://localhost:8080TOKENS_SERVICE_BACKEND_URL=http://localhost:8081DRIFT_REPORTING_BACKEND_URL=http://localhost:3001(optional)
ports: mappings in self-hosting/docker-compose/docker-compose.yml as the source of truth for host ports.
Quick start
- Copy
.env.exampleto.env.localinui/and fill the essentials:In WorkOS, addhttp://localhost:3030/api/auth/callbackand your ngrok callback URL as redirects. - Install deps and run:
Open
http://localhost:3030(or your tunnel URL) and sign in with a WorkOS user that belongs to at least one org. Ensure the WorkOS redirect URI matches the public URL you configured. - Ensure backend + statesman were started and the same secrets are in place (see Backend and Statesman).
- Sync the WorkOS org/user to both services using the curl snippets on those pages (required for repos/units to load).
ngrok setup
PUBLIC_URL=https://<your-ngrok-domain>WORKOS_REDIRECT_URI=https://<your-ngrok-domain>/api/auth/callbackALLOWED_HOSTSincludes<your-ngrok-domain>
Common errors
- NotFound/Forbidden listing units: statesman org/user not synced or webhook secret mismatch.
- 404 on repos or GitHub connect: backend missing org/user,
DIGGER_ENABLE_API_ENDPOINTSnot set, orORCHESTRATOR_GITHUB_APP_URLpoints to a non-existent path. - WorkOS login succeeds but dashboard redirects to / or errors: the signed-in user has no WorkOS org membership; add to an org and resync to services.
- WorkOS redirect blocked: public URL not whitelisted; add your tunnel host to
ALLOWED_HOSTSand to the WorkOS redirect URI list.

