Prometheus Design System

Audit Report

Full visual audit conducted 2026-04-24 via the design-system-extraction-cowork skill.

Scope

App URLhttps://prometheus-e83j.onrender.com
Source repohttps://github.com/prometheus/prometheus
Toolclaude-cowork
Tierfull
Routes discovered10
Routes audited10
Dark modeyes

Tech stack

FrameworkReact
UI libraryMantine v7+ (mantine-* class prefix observed; AppShell + Accordion + Combobox + PillsInput + CodeHighlight components)
CSS approachMantine emotion-style generated class names with CSS variables for theming (data-mantine-color-scheme attribute)
ThemingMantine v7 CSS-variable theming. Theme toggle sets data-mantine-color-scheme='light|dark' on <html> and persists to localStorage key 'mantine-color-scheme-value'. Mantine auto-maps palette tokens (gray.1..gray.9, green.1..green.9, etc.) across themes. Header is NOT themed — always rgb(65,73,81). Syntax highlighting tokens partially theme (hljs stylesheet is theme-aware) but semantic color role assignment drifts — see INC-006.

Pages audited

PageHas dataElementsNotes
Query (PromQL Expression Evaluator)
/query
empty state11 +3Main PromQL expression editor. Expression input (CodeMirror-backed) with Execute primary button. Three tabs: Table / Graph / Explain. DateTimePicker for evaluation time (prev/next arrows). Empty-state alert: 'No data queried yet'.
Alerts (Alerting Rules)
/alerts
empty state6 +1Empty state — no alerting rules configured. Two filters: PillsInput 'Filter by rule group state' + Search 'Filter by rule name or labels'. Empty-state Alert with duplicate title+body 'No rules found / No rules found.'
Target Health
/targets
yes13 +2Richest page. Three-filter row + collapse-all button. Accordion per scrape pool (demo, node, prometheus, pushgateway, …). Each accordion has a 5px-solid colored left-border — green when all UP, red when any DOWN. Panel is a 4-col grid: Endpoint link | Labels (pill-badges) | Last scrape (icon badge + duration badge) | State (UP/DOWN pill-badge).
Rule Health (Recording Rules)
/rules
empty state7 +1Empty state — same shape as /alerts. PillsInput filter 'Filter by rule health' + Search 'Filter by rule name or labels'. Duplicate 'No rules found' empty-state alert — same copy as /alerts though this page shows recording rules.
Service Discovery
/service-discovery
yes11 +2Accordion per scrape pool — same style as /targets. Two-column panel: Discovered labels vs Target labels, each a stack of pill label badges. 'show relabeling' is rendered as a text-only blue anchor inside the panel.
Runtime & Build Information
/status
yes6 +1Two stacked Cards: 'Build information' (with tabler icon) and 'Runtime information' (with runner icon). Each Card contains a 2-column key-value table. 'Configuration Reload: Successful' is rendered as plain black text — not a status badge.
TSDB Status
/tsdb-status
yes8 +1Four stacked Cards: 'TSDB Head Status', 'Top 10 label names with value count', 'Top 10 label names with highest memory usage', 'Top 10 series label value counts'. Titles are plain text WITHOUT leading icons — diverges from /status and /alertmanager-discovery. Label-name cells use bare <code> (monospace, no background).
Command-line Flags
/flags
yes7 +1Card with NO title — jumps straight into a search 'Filter by flag name or value' then a sortable 2-col table (Flag | Value). Both columns have sort chevrons — the only page with sortable columns. Every cell wraps content in <code> (browser-default monospace).
Configuration (YAML)
/config
yes6 +1Centered Mantine CodeHighlight of the Prometheus YAML config, syntax-highlighted with highlight.js yaml grammar. Copy icon button top-right. No Card wrapper, no page title inside content. pre uses bare 'monospace' font-family — no explicit stack.
Alertmanager Discovery
/alertmanager-discovery
empty state7 +1Two Cards — 'Active Alertmanagers' (bell icon) and 'Dropped Alertmanagers' (bell-off icon). Each contains an info-style empty-state Alert with duplicate title+body.

Limitations

Cowork sandbox blocks screenshot export — save_to_disk returns opaque ss_<hash> IDs rather than writable paths, and base64 payloads exceed the runtime.evaluate return limit. Fell back to Degraded Screenshot Mode: 1×1 placeholder JPEGs will be written under screenshots/ via init-placeholders.sh. Claude Code Phase 1.5 is expected to backfill real JPEGs with Playwright.