Skip to main content
View as Markdown

Admin Dashboard

Every Sovrium app auto-mounts a native admin dashboard at /_admin — an operator console for viewing and operating on the running app's data. It is a read-only operational data console: you inspect records, automation runs, form submissions, accounts, files, and analytics, but you never edit configuration here. Configuration is code-only — you change an app by editing its app.ts / app.yaml and re-deploying.

Access model

  • Admin-only. The console and its /api/admin/* routes require an admin session (caller.role === 'admin'). There is no editor/viewer tier.
  • Anonymous → 404. Unauthenticated or non-admin requests get a 404 envelope, never a 401/403 — the surface's existence is unobservable (anti-enumeration; see Security Hardening).
  • No config editing. There is no schema/JSON/YAML editor, no draft → publish, no version ledger — those were removed when Sovrium went config-code-only. The dashboard reflects state; it never mutates configuration.
  • English-only. The console renders its own chrome in English — sign-in, sidebar, headings, table columns, empty states, confirmations, toasts. It pins that language rather than negotiating it, so an operator on a French-locale browser still gets a consistent console instead of a half-translated one. This is the console's own interface only: your app is unaffected and still renders in whatever language its languages config declares.

Signing in

The sign-in page is at /_admin/login. Everything else under /_admin answers 404 until you hold an admin session — including /_admin itself, which returns 404 rather than redirecting you to the sign-in page, because the console does not advertise its own existence. So navigate to /_admin/login directly; there is no link to follow.

Once you are signed in, /_admin/login redirects to the console root.

The /_admin/login sign-in page — a "Sign in to the console" card with email and password fields

Overview

The console root (/_admin) is a Dashboard overview: at-a-glance KPI tiles and a short activity trend across the app's domains — records written, automation runs, form submissions, users — over a shared period preset (24h / 7d / 30d).

The /_admin overview — the console shell with the Application, System, and Developers sidebar, and KPI tiles for records, submissions, automation runs, users, storage, and connections

Application surfaces

Day-to-day operational data, grouped under Application in the sidebar:

Surface Route What you see
Records /_admin/tables Every table's records — sort, filter, open a row in a detail drawer.
Submissions /_admin/forms Form submissions inbox, per form, with the captured payload.
Files /_admin/buckets Uploaded files per bucket, with size and MIME.

The Records surface — a tickets data-table with sortable columns, status badges, and a records toolbar

The Submissions surface — a per-form submissions inbox with an empty state and CSV export

The Files surface — a bucket file browser with a drag-and-drop upload zone

System surfaces

Runtime operations and accounts, grouped under System:

Surface Route What you see
Runs /_admin/automations Automation-run history — status, duration, per-step trace.
Conversations /_admin/agents AI agent conversations and their messages.
Users /_admin/users The account directory and role distribution.
Connections /_admin/connections Connected third-party accounts (OAuth, API keys).
Analytics /_admin/pages Privacy-friendly page analytics.

The Runs surface — automation-run history with status badges, duration, and per-automation filters

The Users surface — the account directory with role, status, and per-user actions

Developers

  • API (/_admin/api) — the Scalar-rendered OpenAPI reference for the app's REST surface.
  • MCP (/_admin/mcp) — how to connect an AI client over the Model Context Protocol.
  • /gdpr — the signed-in user's own data export and account erasure (GDPR self-service).
  • ⌘K search — a global, indexed command palette that jumps to any record or surface from anywhere in the console.

The ⌘K command palette open over the console — a "Search all your data" input

The read API

The console is backed by the /api/admin/* read API — the same endpoints you can call directly for incident reports, on-call handoffs, or SOC2 / GDPR review. Every endpoint is admin-gated, emits a canonical audit-log event, and returns 404 on unauthorized access.

Shape Endpoint pattern Body
Overview GET /api/admin/{domain}/overview Period-aware totals, a bucketed time series, and derived health metrics.
List GET /api/admin/{domain} Cursor-paginated items, each with an operator-grade _admin metadata block.

Domains include config, automations, users, tables, buckets, and forms. Overview endpoints share one period preset (24h / 7d / 30d); list endpoints accept cursor pagination, free-text search, and ?include_deleted=true.

>_ terminal
# Version reflection — the smallest read endpoint
curl -H 'Cookie: <admin session>' http://localhost:3000/api/admin/config/version

# Period-scoped overview
curl -H 'Cookie: <admin session>' 'http://localhost:3000/api/admin/tables/overview?period=7d'

Last updated August 11, 2026

This documentation was written with AI, so errors or outdated content are possible. Sovrium is in beta. Contributions and corrections are welcome.

Built with Sovrium