Phase 1.5 — Service Admin Panel¶
Date: 2026-03-02
Why¶
Phase 1 backend is complete, but operations still need a dedicated internal control surface. This phase introduces a separate web service for operational visibility over pipeline and system tables.
Scope¶
- Independent service process/container (
ft.admin_panel) - HTTP Basic authentication
- Read-only operational dashboard
- JSON endpoints for automation/integrations
- Docker Compose integration as separate service on port
8010
Non-Goals¶
- No writes/mutations to core tables in this phase
- No coupling to public portal UI
- No replacement of monitoring stack (Prometheus/Grafana remain source of truth for metrics)
Service Contract¶
Public health (no auth):
- GET /health
Protected (Basic Auth):
- GET / — HTML dashboard
- GET /api/overview
- GET /api/dashboard
- GET /api/networks
- GET /api/outbox/topics
- GET /api/dlq
Dashboard Data¶
- Core counts: raw/normalized events, ownership rows, projections, active keys
- Outbox status: pending count, oldest pending age, pending-by-topic
- DLQ status: depth + latest entries
- Cursor status by network (
ref.networks+system.sync_cursors) - Registered worker task inventory from worker framework registry
Runtime¶
Environment:
- ADMIN_PANEL_HOST (default 0.0.0.0)
- ADMIN_PANEL_PORT (default 8010)
- ADMIN_PANEL_USERNAME (default admin)
- ADMIN_PANEL_PASSWORD (default admin)
Compose service:
- admin_panel (separate container/port)
Exit Criteria¶
- Service starts independently from public portal
- Basic auth enforced on all admin routes except
/health - Dashboard renders with live DB data
- JSON endpoints return typed payloads
- API tests for auth and response contracts pass