Skip to content

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