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
Two viable placements are described below. Both remain open for decision.
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:
/analytics/* routes are self-explanatory in URLsCons:
*The remainder of this document (sections 2–12) describes the interaction design for Option A.*
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:
/analytics/production)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.
/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:
All filter state is URL-driven → deep-linkable and shareable.
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:
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:
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:
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:
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:
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:
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.
Reusable component appearing on every analytics page.
┌──────────────────────────────────────────────┐
│ [7d] [30d] [90d] [12m] [Custom...] │
└──────────────────────────────────────────────┘
┌────────────────────┐
│ [Icon] Title │
│ ───────────── │
│ VALUE │ ← large, prominent
│ ▲ +X% vs prev │ ← trend indicator + delta
│ P90: VALUE │ ← secondary stat
└────────────────────┘
┌────────────────────────────────────────────┐
│ [Weekly | Monthly toggle] │
│ ───────────────────────────────── │
│ [Line/area chart with axis labels] │
│ [Hover: tooltip with exact values] │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ [Time range ▾] [Object type ▾] [Language ▾] [Clear all] │
└────────────────────────────────────────────────────────────────┘
[↓ Export CSV]
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
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
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
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)
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"
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)
Key responsive decisions:
Every page section has its own independent loading skeleton:
Sections load independently — a slow chart query does not block the summary cards from rendering.
<details> disclosure)The Admin Portal does not get a full analytics section. However:
The following are explicitly not part of this feature's UX: