Local Dashboard Development
Run the hosted-style dashboard locally with mock OAuth, disposable state, protected APIs, and filesystem-served UI assets.
Start the local dashboard
make dev-dashboard
The launcher starts two local Go processes: the mock OAuth provider on 127.0.0.1:8090 and cmd/server on localhost:8080. It also creates a temporary API key file, SQLite security store, user store, cookie jar path, and session secret.
Sign in with mock OAuth
Open the dashboard URL printed by the command, or start the OAuth flow directly:
open http://localhost:8080/oauth/google
The mock provider returns [email protected] by default. Override it with NFLTR_DEV_ADMIN_EMAIL when you need to test another account.
Call protected APIs locally
The script prints exact commands with the generated state directory. The flow is:
COOKIE_JAR=/tmp/nfltr-dev-cookies.txt
curl -sS -c "$COOKIE_JAR" -b "$COOKIE_JAR" -L http://localhost:8080/oauth/google >/dev/null
curl -sS -b "$COOKIE_JAR" http://localhost:8080/session
curl -sS -b "$COOKIE_JAR" http://localhost:8080/api/v1/dashboard/agents
curl -sS -b "$COOKIE_JAR" http://localhost:8080/api/v1/dashboard/settings
curl -sS -b "$COOKIE_JAR" http://localhost:8080/api/v1/dashboard/global-settings
curl -sS -b "$COOKIE_JAR" http://localhost:8080/api/v1/dashboard/fleet-tokens
For planner-side protected APIs, use the local API key printed by make dev-dashboard:
curl -sS -H "X-API-Key: dev-local-api-key" \
-H "Content-Type: application/json" \
-d '{"tasks":[{"task_id":"local-demo","planner_id":"dev-planner","state":"running","worker_id":"dev-worker","events":[{"at":"2026-01-01T00:00:00Z","kind":"state","detail":"running"}]}]}' \
http://localhost:8080/api/v1/orchestration/digest
curl -sS -b "$COOKIE_JAR" http://localhost:8080/api/v1/orchestration/tasks
curl -sS -b "$COOKIE_JAR" "http://localhost:8080/api/v1/orchestration/events/tail?limit=50"
Edit website and docs
The server runs with UI_DEV_DIR=web, so HTML, CSS, landing, login, dashboard, and docs files are read from disk. Refresh the browser after editing files under web/.
For TypeScript dashboard changes, rebuild generated JavaScript before refreshing:
make web-build
Useful overrides
NFLTR_DEV_PROXY_PORT=18080 make dev-dashboard
NFLTR_DEV_OAUTH_PORT=18090 make dev-dashboard
NFLTR_DEV_STATE_DIR=.nfltr/dev-dashboard make dev-dashboard
NFLTR_DEV_KEEP_STATE=1 make dev-dashboard
[email protected] make dev-dashboard
Troubleshooting
If startup fails, inspect the log paths printed by the launcher. Port conflicts can be fixed by changing the matching NFLTR_DEV_*_PORT variable. If the browser has an old cookie, visit /logout or remove the cookie jar and sign in again.