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, with an Invite affordance and a per-user role change.
Invitations /_admin/users/invitations Outstanding invitations — issue one, resend it, or revoke it. See Invitations.
Connections /_admin/connections Outbound credentials this app presents to third-party services — the app.connections[] directory (OAuth2, API key, basic, bearer). See Connections.
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.
  • Design system (/_admin/design-system) — the app's tokens, voice and component catalog drawn at their rendered values. See Design System Console.
  • API keys (/_admin/api-keys) — the signed-in operator's own long-lived credentials: mint, copy once, revoke. Available when auth.apiKeys is on. See API Keys.
  • /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'

Design-system export

Two further read endpoints project the app's design system — its tokens plus the principles, voice and usage rules declared under design. Both are admin-gated and return 404 to anyone else, and neither accepts a write.

Endpoint Format
GET /api/admin/design-system.json A W3C Design Tokens (DTCG) 2025.10 document.
GET /api/admin/design-system.md A markdown brief written to be pasted into an AI agent's context.
>_ terminal
curl -H 'Cookie: <admin session>' http://localhost:3000/api/admin/design-system.md

They read design and theme only — never an environment-variable value, never record data — so the output is safe to paste into a shared context window. The same content is available offline from sovrium design-system.

The Design System Console renders the same projection as a page, and can publish it behind a revocable share link — an unlisted GET /s/design-system/{token} that anyone can read with no login, and that 404s the moment you revoke it.

Last updated September 1, 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