Web UI guide

The same engine behind a local dashboard. Nothing leaves your machine: the server binds loopback and serves the SPA plus a JSON API.

Launch

uv tool install '.[web]' --force   # once: install with the web extra
devdoctor serve                     # opens a browser tab at a random free port
devdoctor serve --port 8731 --no-browser

--port 0 (the default) picks a random free port; --port N binds N.

Pages

API (all under /api, loopback only)

Disk: GET /api/health · GET /api/scan · GET /api/disk/scan · GET /api/scan/progress (server-sent events) · GET /api/providers · POST /api/recipe · GET /api/disk-usage · GET /api/snapshots · POST /api/snapshots · GET /api/snapshots/{name} · GET /api/diff · GET /api/history · GET /api/dashboard/disk-summary.

Cleanup jobs (the wizard backend): POST /api/clean/jobs · GET /api/clean/jobs/{job_id}/events (SSE) · POST /api/clean/jobs/{job_id}/answer · POST /api/clean/jobs/{job_id}/confirm · POST /api/clean/jobs/{job_id}/cancel.

Memory: GET /api/memory · /api/memory/history · /api/memory/snapshots* · /api/memory/sources · /api/memory/providers · /api/memory/workloads · POST /api/memory/plan · POST /api/memory/actions.

Developing the UI

cd web && bun install --frozen-lockfile && cd ..   # one-time SPA deps
uv run devdoctor serve --port 8731 --no-browser  # terminal 1: FastAPI
cd web && bun run dev                          # terminal 2: Vite HMR (proxies /api)

Open http://localhost:5173. For a production-style run, ./scripts/deploy.sh builds the SPA, drops the stale wheel, and reinstalls with the bundle included.

Next: Tutorial · CLI reference · Docs for agents