← Back to Analytics & Business intelligence
UX Specification

Analytics & Business intelligence

UX Specification AzDO #4096

UX Specification: Analytics & BI — Content Production Metrics

050-content-production-analytics2025-05-18
Contents
  1. 1. IA Placement & Navigation
  2. 2. Route Map
  3. 3. Page Designs
  4. 4. Cross-Workspace Aggregated View
  5. 5. Shared Components
  6. 6. User Flows
  7. 7. Responsive Behaviour
  8. 8. Data Freshness & Loading
  9. 9. Accessibility
  10. 10. Admin Portal Considerations
  11. 11. Design Tokens & Visual Language
  12. 12. Out of Scope

UX Specification: Analytics & BI — Content Production Metrics

Feature: 050-content-production-analytics

Document type: UX specification (wireframes, flows, interaction patterns)

Date: 2025-05-18

Reference spec: spec.md

Reference IA: Platform Information Architecture

Status: Draft


1. IA Placement & Navigation

Where does Analytics live?

Two viable placements are described below. Both remain open for decision.


Option A — Dedicated Analytics section (new sidebar item)

Analytics is a new top-level sidebar item in the main Platform app, positioned between Dashboard and Authoring. Content managers need quick access to production metrics without leaving the primary app surface.

Sidebar update:

┌──────┐
│ ◉ │ ← app logo / home
├──────┤
│ ⊞ │ Dashboard
│ 📊 │ Analytics ← NEW
│ ✎ │ Authoring
│ ✦ │ AI Tools [capability-gated]
├──────┤
│ │
│ │
├──────┤
│ ✉ │ Feedback button
│ 👤 │ User avatar
└──────┘

Pros:

Cons:

*The remainder of this document (sections 2–12) describes the interaction design for Option A.*


Option B — Analytics embedded inside the Dashboard (no new page)

Analytics content lives within the existing Dashboard page as a collapsible section or tab, with detail panels opening as drawers or modals rather than navigating to separate routes.

Sidebar: unchanged

┌──────┐
│ ◉ │ ← app logo / home
├──────┤
│ ⊞ │ Dashboard ← analytics lives here
│ ✎ │ Authoring
│ ✦ │ AI Tools [capability-gated]
├──────┤
│ │
│ │
├──────┤
│ ✉ │ Feedback button
│ 👤 │ User avatar
└──────┘

Dashboard layout (Option B):

┌────────────────────────────────────────────────────────────────┐
│ [Page header: workspace name + search bar + workspace switcher]│
├────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────────────┐ │
│ │ Summary │ │ Summary │ │ Pie / Chart Widget │ │
│ │ Card │ │ Card │ │ │ │
│ └──────────┘ └──────────┘ └──────────────────────────────┘ │
│ │
│ ── PRODUCTION ANALYTICS ────────────────────────── [▾ Hide] ─ │
│ ┌────────────────────────────────────────────────────────────┐│
│ │ [Summary cards: Production | Translation | Publishing | …] ││
│ │ [Trend chart] ││
│ │ [Time range ▾] [Export CSV ↓] ││
│ │ "Click any card for detail →" ││
│ └────────────────────────────────────────────────────────────┘│
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Welcome Card / Quick Links │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────┘

Detail interaction (Option B): Clicking a metric card opens a right-side Sheet drawer (Radix UI Sheet) containing the full detail view (charts, filters, bottleneck table) rather than navigating away.

Dashboard
 → user clicks "Production Duration" card
 → Sheet slides in from right edge, full viewport height
 → contains the full Production Duration detail view (§3.2 layout)
 → [✕ Close] collapses sheet, returns focus to Dashboard

Routes (Option B): No new top-level route. Drawer state may be URL-encoded as a search param for shareability:

/ws/:workspaceId/dashboard?analytics=production&range=30d

Pros:

Cons:


Capability gating (both options): No special capability gate required for workspace-scoped analytics. Cross-workspace aggregated view requires a viewCrossWorkspaceAnalytics capability — users without it see only their workspace-scoped data.


2. Route Map

/ws/:workspaceId/analytics/
├── (index) → Dashboard Overview (US5 — summary cards + trends)
├── production → Production Duration detail (US1)
├── translation → Translation Duration detail (US2)
├── publishing → Static Publishing Duration detail (US3)
├── reviews → Review Iterations detail (US4)
└── ai-workflows → AI Workflow Usage detail (US6)

URL state conventions:

| State | Mechanism | Example |
|---|---|---|
| Time range | URL search param | `?range=30d` or `?from=2025-01-01&to=2025-03-31` |
| Workspace filter | Inherited from URL path | `/ws/:workspaceId/` |
| Object type filter | URL search param | `?objectType=dita-topic` |
| Language filter | URL search param | `?language=de` |
| Cross-workspace mode | URL search param | `?scope=cross-workspace` (manager role only) |

All filter state is URL-driven → deep-linkable and shareable.


3. Page Designs

3.1 Analytics Dashboard Overview (Index)

Route: /ws/:workspaceId/analytics

Maps to: User Story 5 — Dashboard Overview with Trends

Purpose: At-a-glance health view. Entry point that links to detail pages.

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Analytics" + [Time range picker ▾] + [Export CSV ↓]] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 📈 Production │ │ 🌐 Translation │ │ 📄 Publishing │ │
│ │ Avg: 14.2 days │ │ Avg: 5.3 days │ │ Avg: 12 min │ │
│ │ ▲ +8% vs prev │ │ ▼ -3% vs prev │ │ ─ 0% vs prev │ │
│ │ P90: 28 days │ │ P90: 9 days │ │ P90: 35 min │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 🔄 Reviews │ │ 🤖 AI Workflows │ │
│ │ Avg: 2.1 iter │ │ 42% AI-assisted │ │
│ │ ▲ +0.3 vs prev │ │ 68% w/ human │ │
│ │ Max: 7 iter │ │ ▲ +5% adoption │ │
│ └──────────────────┘ └──────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ COMBINED TREND CHART (sparklines or multi-line) │ │
│ │ ───────────────────────────────────────────────────────────── │ │
│ │ [Line: Production duration] [Line: Translation duration] │ │
│ │ │ │
│ │ ╱╲ │ │
│ │ ╱ ╲ ╱─╲ │ │
│ │ ─╱ ╲──╱ ╲────── │ │
│ │ │ │
│ │ Jan Feb Mar Apr May Jun │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ IN-PROGRESS / AGING ITEMS │ │
│ │ ───────────────────────────────────────────────── │ │
│ │ 12 objects in Draft > 7 days │ 5 awaiting translation > 3 days │ │
│ │ 2 publish jobs running │ 3 objects in 3rd+ review cycle │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:

States:


3.2 Production Duration Detail

Route: /ws/:workspaceId/analytics/production

Maps to: User Story 1 — View End-to-End Content Production Duration

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Production Duration"] │
│ [← Back to Analytics] [Time range ▾] [Object type ▾] [Export ↓] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ── SUMMARY STATS ── │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Average │ │ Median │ │ P90 │ │ Min / Max │ │
│ │ 14.2 days │ │ 11 days │ │ 28 days │ │ 2d / 45d │ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ ── STAGE BREAKDOWN (stacked bar or waterfall) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Draft ████████░░░░░░░░░░░░░░░░░░░░ 4.1 days (29%) │ │
│ │ Review ░░░░░░░░████████████░░░░░░░░ 6.3 days (44%) │ │
│ │ Approved ░░░░░░░░░░░░░░░░░░░████░░░ 2.1 days (15%) │ │
│ │ → Released ░░░░░░░░░░░░░░░░░░░░░░██ 1.7 days (12%) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── TREND CHART ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Toggle: Weekly | Monthly] │ │
│ │ │ │
│ │ Average production duration over time (line chart) │ │
│ │ + P90 band shaded behind │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── BOTTLENECK TABLE (sortable) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Object Name │ Type │ Total Duration │ Slowest Stage │ Status│ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ Procedure X │ DITA │ 45 days │ Review (32d) │ Rel │ │
│ │ Safety Warning Y │ DITA │ 38 days │ Draft (20d) │ Rel │ │
│ │ Overview Z │ MD │ 34 days │ Review (18d) │ Rel │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ [Sorted by longest duration by default │ Paginated │ 25 per page] │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:


3.3 Translation Duration Detail

Route: /ws/:workspaceId/analytics/translation

Maps to: User Story 2 — Track Translation Duration

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Translation Duration"] │
│ [← Back] [Time range ▾] [Language pair ▾] [Export ↓] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ── PER-LANGUAGE SUMMARY ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Target Language │ Avg Duration │ P90 │ In Progress │ Trend│ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ German (DE) │ 4.8 days │ 8 days │ 12 items │ ▼ │ │
│ │ French (FR) │ 5.1 days │ 9 days │ 8 items │ ▲ │ │
│ │ Japanese (JA) │ 7.2 days │ 14 days │ 5 items │ ─ │ │
│ │ Chinese (ZH) │ 6.5 days │ 12 days │ 3 items │ ▼ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── TREND CHART ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Multi-line: one line per language, or filtered to one] │ │
│ │ [Toggle: Weekly | Monthly] │ │
│ │ │ │
│ │ Translation duration trend by language │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── AWAITING TRANSLATION (in-progress items) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Object Name │ Source │ Target │ Waiting Since │ Elapsed │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ Procedure X │ EN │ DE │ May 10 │ 8 days │ │
│ │ Safety Warning Y │ EN │ JA │ May 12 │ 6 days │ │
│ │ Overview Z │ EN │ FR │ May 15 │ 3 days │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ [Sorted by longest waiting │ Highlighted if > P90 threshold] │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:


3.4 Static Publishing Duration Detail

Route: /ws/:workspaceId/analytics/publishing

Maps to: User Story 3 — Track Static Publishing Duration

> Scope: This page covers static output publishing only — PDF renditions and HTML content packages. It does NOT cover dynamic content delivery through the Content Delivery Platform (CDP). CDP delivery performance is a separate operational concern.

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Publishing Duration (Static Outputs)"] │
│ [← Back] [Time range ▾] [Output format ▾: PDF | HTML | All] │
│ [Export ↓] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ── SUMMARY STATS ── │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Average │ │ P50 │ │ P90 │ │ Min / Max │ │
│ │ 12 min │ │ 9 min │ │ 35 min │ │ 2m / 1h │ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ ── BY OUTPUT FORMAT ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Format │ Avg Duration │ P90 │ Jobs (period) │ Failed │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ PDF │ 14 min │ 38 min │ 124 │ 3 │ │
│ │ HTML Pkg │ 8 min │ 22 min │ 67 │ 1 │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── TREND CHART ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Toggle: Weekly | Monthly] │ │
│ │ │ │
│ │ Publishing duration trend (line) with failure rate overlay │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── CURRENTLY RUNNING JOBS ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Job ID │ Object │ Format │ Started │ Elapsed │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ pub-abc │ Manual v2 │ PDF │ 11:42 today │ 8 min ⏳ │ │
│ │ pub-def │ Guide v1 │ HTML │ 11:38 today │ 12 min ⚠️ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ [⚠️ = exceeding P90 average — potential infrastructure issue] │
│ │
│ ── FAILED JOBS ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Job ID │ Object │ Format │ Failed At │ Error Summary │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ pub-xyz │ Report v3 │ PDF │ May 16 │ Timeout │ │
│ │ pub-uvw │ Spec v1 │ HTML │ May 14 │ Transform err │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ [Click row → expands to show full error context] │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:


3.5 Review Iterations Detail

Route: /ws/:workspaceId/analytics/reviews

Maps to: User Story 4 — Track Review Iteration Counts

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Review Iterations"] │
│ [← Back] [Time range ▾] [Object type ▾] [Export ↓] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ── SUMMARY STATS ── │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Average │ │ Median │ │ Max │ │ 1st-pass │ │
│ │ 2.1 iter │ │ 2 iter │ │ 7 iter │ │ 34% rate │ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ ("1st-pass rate" = % of objects approved on first submission) │
│ │
│ ── DISTRIBUTION CHART (histogram) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ████ │ │
│ │ ████ ████ │ │
│ │ ████ ████ ██ │ │
│ │ ████ ████ ████ ██ │ │
│ │ ████ ████ ████ ████ █ │ │
│ │ ───────────────────────── │ │
│ │ 1 2 3 4 5+ iterations │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── TREND CHART ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Toggle: Weekly | Monthly] │ │
│ │ │ │
│ │ Average iterations over time (are we improving?) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── HIGH-ITERATION OBJECTS (sorted desc) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Object Name │ Type │ Iterations │ Author │ Status │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ Procedure X │ DITA │ 7 │ A. Smith │ Approved │ │
│ │ Safety Warning Y │ DITA │ 5 │ B. Jones │ Review │ │
│ │ Guide Z │ MD │ 4 │ A. Smith │ Approved │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ [Objects with iteration count > 2× median highlighted in amber] │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:


3.6 AI Workflow Usage Detail

Route: /ws/:workspaceId/analytics/ai-workflows

Maps to: User Story 6 — Track AI Agent Workflow Usage and Human-in-the-Loop Trends

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "AI Workflow Usage"] │
│ [← Back] [Time range ▾] [Export ↓] │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ── SUMMARY STATS ── │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ Total Workflows│ │ AI-Assisted │ │ Human-in-Loop │ │
│ │ 156 │ │ 65 (42%) │ │ 44 of 65 (68%) │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
│ │
│ ── BREAKDOWN DONUT / PIE ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────┐ │ │
│ │ ╱ ╲ Legend: │ │
│ │ │ Manual │ ■ Manual workflows (58%) │ │
│ │ │ (no AI) │ ■ AI + Human-in-loop (28%) │ │
│ │ ╲ ╱ ■ AI fully automated (14%) │ │
│ │ └─────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── TREND CHART (stacked area) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Toggle: Weekly | Monthly] │ │
│ │ │ │
│ │ Stacked area: Manual / AI+Human / AI Automated │ │
│ │ Shows adoption trajectory over time │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ── EMPTY STATE (when no AI workflows in period) ── │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Illustration: robot with clipboard] │ │
│ │ "No AI-assisted workflows in the selected period" │ │
│ │ "Workflows using AI agents will appear here once executed." │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────┘

Interaction patterns:


4. Cross-Workspace Aggregated View

Access: Users with viewCrossWorkspaceAnalytics capability (manager/stakeholder role)

Trigger: Scope toggle in the page header or a dedicated "Cross-Workspace" option in workspace switcher

┌────────────────────────────────────────────────────────────────────────┐
│ [Page header: "Analytics" + [Scope: My Workspace ▾ | All ▾]] │
│ ↑ only visible to managers │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ When "All Workspaces" selected: │
│ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ ⓘ Showing aggregated totals across all workspaces you oversee. │ │
│ │ Individual workspace breakdowns are not shown here. │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ [Same summary card layout as §3.1 but with aggregated numbers] │
│ [Same trend chart but combining all authorized workspaces] │
│ [Bottleneck / detail tables show object name + workspace badge] │
│ │
└────────────────────────────────────────────────────────────────────────┘

Privacy rule (FR-015): Cross-workspace views show only aggregated totals. Individual workspace names or per-workspace breakdowns are never exposed. Objects in the bottleneck table show a workspace badge only to users who already have access to that workspace.


5. Shared Components

5.1 Time Range Picker

Reusable component appearing on every analytics page.

┌──────────────────────────────────────────────┐
│ [7d] [30d] [90d] [12m] [Custom...] │
└──────────────────────────────────────────────┘

5.2 Metric Summary Card

┌────────────────────┐
│ [Icon] Title │
│ ───────────── │
│ VALUE │ ← large, prominent
│ ▲ +X% vs prev │ ← trend indicator + delta
│ P90: VALUE │ ← secondary stat
└────────────────────┘

5.3 Trend Chart

┌────────────────────────────────────────────┐
│ [Weekly | Monthly toggle] │
│ ───────────────────────────────── │
│ [Line/area chart with axis labels] │
│ [Hover: tooltip with exact values] │
└────────────────────────────────────────────┘

5.4 Filter Bar

┌────────────────────────────────────────────────────────────────┐
│ [Time range ▾] [Object type ▾] [Language ▾] [Clear all] │
└────────────────────────────────────────────────────────────────┘

5.5 Export Button

[↓ Export CSV]

6. User Flows

Flow 1: Content Manager Checks Production Health

Content manager clicks Analytics (📊) in sidebar
 → /ws/{workspaceId}/analytics loads
 → Dashboard overview renders with 5 summary cards + trend chart
 → manager notices Production card shows ▲ +8% (degradation)
 → clicks Production card
 → navigates to /analytics/production
 → sees Review stage consuming 44% of time
 → scrolls to bottleneck table
 → identifies 3 objects stuck in Review for 30+ days
 → clicks object name → navigates to Authoring to investigate

Flow 2: Manager Identifies Translation Delay

Content manager navigates to /analytics/translation
 → sees "Awaiting Translation" table
 → notices 12 items waiting for German translation > 7 days
 → filters by language pair: EN → DE
 → trend chart confirms DE translations slowing over past 4 weeks
 → exports CSV with details
 → shares with translation vendor for escalation

Flow 3: Operations Team Detects Publishing Infrastructure Issue

Content manager navigates to /analytics/publishing
 → sees "Currently Running Jobs" table
 → 2 jobs have ⚠️ indicator (exceeding P90)
 → scrolls to Failed Jobs section
 → 3 failures in past 48 hours (unusual)
 → expands failed job row → sees "Timeout" errors
 → exports data → escalates to infrastructure team

Flow 4: Manager Views Cross-Workspace Totals

Manager (with viewCrossWorkspaceAnalytics capability) opens Analytics
 → sees scope toggle in header: "My Workspace ▾"
 → switches to "All Workspaces"
 → info banner confirms aggregated view
 → summary cards show totals across all authorized workspaces
 → clicks Production card
 → detail page shows aggregated bottleneck table
 → objects show workspace badges (only for workspaces manager has access to)

Flow 5: Content Manager Exports Metrics for Reporting

Content manager on any analytics detail page
 → sets time range to "90d"
 → applies Object type filter: "DITA Topic"
 → reviews filtered data on screen
 → clicks [↓ Export CSV]
 → browser downloads CSV file
 → filename: "analytics-production-workspace-name-90d-dita-topic.csv"

Flow 6: First-Time Empty State

Content manager clicks Analytics in sidebar (new workspace, no released content yet)
 → Dashboard overview loads
 → All cards show "—" (no data)
 → Combined trend chart area shows empty state:
 "No production data available yet. Objects must complete at least
 one lifecycle stage to appear in analytics."
 → In-progress section shows:
 "5 objects currently in Draft" (aging items still visible)

7. Responsive Behaviour

| Breakpoint | Layout |
|---|---|
| Desktop (≥ 1200px) | Full layout: 5 summary cards in row, charts side-by-side where applicable |
| Tablet (768px–1199px) | Cards wrap to 2–3 per row, charts stack vertically |
| Mobile (< 768px) | Single column: cards stack, charts full-width, tables scroll horizontally |

Key responsive decisions:


8. Data Freshness & Loading

Refresh model

Loading states

Every page section has its own independent loading skeleton:

Sections load independently — a slow chart query does not block the summary cards from rendering.

Error handling


9. Accessibility


10. Admin Portal Considerations

The Admin Portal does not get a full analytics section. However:


11. Design Tokens & Visual Language

| Element | Treatment |
|---|---|
| Trend improving (↓ duration, ↓ iterations) | Green accent (`--color-success`) |
| Trend degrading (↑ duration, ↑ iterations) | Amber accent (`--color-warning`) |
| Trend stable | Grey/neutral (`--color-muted`) |
| Failed jobs | Red accent (`--color-destructive`) |
| P90 threshold exceeded | Amber background row highlight |
| Chart primary line | Brand primary color |
| Chart secondary lines | Distinguishable palette (accessible contrast) |
| Empty state illustrations | Consistent with existing app empty state style |

12. Out of Scope

The following are explicitly not part of this feature's UX: