Browse documents

UX Journey Maps

Status: v1.0 · Owner: Design Lead + Product Owner · Gate input: G1 Maps the critical end-to-end loops that define the product. Each journey lists the persona, the stages, what the user sees/does, the emotional state, the failure modes we design against, and the screens/phases involved. These journeys are the backbone of the Phase 9 end-to-end QA scenarios (Phase_9.md §5.2).

Notation per stage: Do (user action) · See (system response) · Feel (emotional state) · Risk (failure mode we design against).


J1 — Technician completes an inspection offline (Tomás) ★ core loop

Persona: Tomás (Technician, mobile) · Phases: P4, P8 · Maps to Phase 9 Scenario C

 Start of shift                 In the plant room (no signal)              Back in coverage
 ─────────────                  ─────────────────────────────             ────────────────
  Open app ──▶ Tasks tab ──▶ Pick WO ──▶ Start inspection ──▶ Fill checklist ──▶ Photo + signature ──▶ Submit ──▶ (queued) ──▶ Auto-sync ──▶ Done
StageDoSeeFeelRisk → design response
ArriveOpen PWA from home screenBottom nav, Tasks badge with today's countOrientedCold start slow → precached shell, skeletons
TriageTap TasksMy queue, sorted priority + location, SLA chipsIn controlWrong sort → default = priority then nearest location
OpenTap a work orderDetail: asset, checklist, sticky Start buttonFocusedBuried action → sticky action bar, one primary button
Lose signal(walks into basement)Subtle "Offline" banner; everything still worksUnbotheredHidden offline state → explicit, calm banner (not an error)
ExecuteComplete checklist, add photo, scan QR, signLarge controls; progress saved per fieldConfidentLost input → autosave each field to IndexedDB
SubmitTap Submit"Saved on device · will sync when online" badgeReassuredSilent fail → never claim "done", claim "saved + pending"
Reconnect(returns to coverage)Toast: "1 inspection synced ✓"; badge clearsReliefConflict (server changed) → plain-language merge, default server-wins + manual override

Design must-haves: explicit offline/queued/synced states (see UX_patterns.md State Matrix); 44px targets; no precision gestures required; sync status always truthful.


J2 — FM Supervisor runs the daily ops rhythm (Mei) ★ core loop

Persona: Mei (FM Supervisor) · Phases: P4, P5, P7 · Maps to Phase 9 Scenario B

 Morning glance ──▶ Investigate ──▶ Act ──▶ Approve on the move ──▶ Report
 (dashboard)        (drill-through)  (assign)  (mobile inbox)        (monthly)
StageDoSeeFeelRisk → design response
GlanceOpen landing dashboardPDCA KPI cards: open WOs by priority, SLA breaches, anomalies, planned:reactiveInformed in 5sNoise → glanceable hierarchy, big primary number, quiet context
TrustHover/click a KPIProvenance + drill straight to underlying recordsConfidentUnverifiable KPI → every KPI clickable to its source rows
ActReassign overdue WOs from the listInline assign, escalation chain visibleEfficientModal maze → inline action + optimistic update
Approve(on phone, later) Open InboxApprovals list; swipe-right approve, swipe-left rejectUnblockedBuried approvals → bottom-nav Inbox with unread badge + push
TuneEdit dashboard, drag a widgetPalette + inspector with sensible defaults, live previewEmpoweredJSON config → curated form copy, no raw config
ReportRun/schedule monthly KPI reportBranded PDF/XLSX, matches dashboard numbersTrustedMismatch report vs dashboard → single KPI service feeds both

Design must-haves: KPI card = headline number + trend + drill target; dashboard editor usable by non-engineers; report numbers reconcile with dashboard numbers exactly.


J3 — Tenant onboarding & first data (Daniel) ★ first-impression loop

Persona: Daniel (Tenant Admin) · Phases: P2, P3 · Maps to Phase 9 Scenario A

 Accept invite ──▶ Brand it ──▶ Add people ──▶ Connect data ──▶ Import ledger ──▶ See telemetry live
                  (settings)    (users/roles)  (gateway/MQTT)   (Excel wizard)    (dashboard)
StageDoSeeFeelRisk → design response
EnterAccept invite, enroll MFAGuided onboarding checklist with progressWelcomedMaze of settings → single checklist surface with progress
BrandUpload logo, set primary/accentLive preview of brand theme appliedOwnershipBrand not applied → theme applies < 1 frame, preview instant
PeopleInvite users, assign rolesRole editor with permission checkboxes grouped by moduleSecurePermission confusion → grouped, plain-language permission labels
ConnectCreate gateway, get credentialsStep-by-step connect guide + health beacon statusCapableOpaque connect → live "waiting for first beacon…" → "connected ✓"
ImportUpload KTC asset ledger (8,180 rows)Column-map preview, dry-run, top-50 preview, error reportConfidentOpaque bulk fail → row-level errors + downloadable report, no all-or-nothing
PayoffOpen default dashboardLive telemetry flowing within minutesDelightedEmpty product → seed a starter dashboard from a template

Design must-haves: onboarding as a guided checklist, not scattered settings; import wizard with preview + dry-run + downloadable errors (Phase_3.md §5.6); a non-empty first dashboard so the tenant never sees a blank product.


J4 — Anomaly to resolution, AI-assisted (Priya → Tomás) ★ differentiator loop

Personas: Priya (NOC) + AI + Tomás · Phases: P3, P6, P7, P8 · Maps to Phase 9 Scenario C

 Telemetry breach ──▶ Alert feed ──▶ AI explains ──▶ Workflow creates P2 WO ──▶ Approval ──▶ Technician executes ──▶ KPIs update
   (Phase 3)           (Phase 5)      (Phase 6)        (Phase 7)               (Phase 7)     (Phase 8)              (Phase 4/5)
StageDo/HappenSeeFeelRisk → design response
DetectChiller temp crosses thresholdAlert appears in War Room feed, high contrastAlertMissed alarm → alert feed always-visible, audible/visual escalation
Explain(AI) anomaly explanationPlain-language cause + last-24h chart + citationInformedBlack-box AI → reasoning + cited telemetry shown, not just a verdict
AutomateWorkflow fires"Workflow X created WO-1234" with run timelineTrustingHidden automation → workflow run is visible + auditable step-by-step
ApproveFM approves P2 on mobileOne-tap approve; audit entry writtenUnblockedLost approval → multi-channel + escalation timer
ExecuteTomás does the work (J1)Offline-capable executionEffective(see J1)
Close loopKPIs/MTTR recomputeDashboard reflects the resolutionClosedStale KPIs → recompute on close, dashboard live-updates

Design must-haves: AI always shows reasoning + citations + the data it used; workflow runs are transparent and auditable; the human approval gate is unmissable; OT control actions require explicit human-in-the-loop (never silent automation).


J5 — Executive asks a question and gets the monthly story (Akiko)

Persona: Akiko (Executive) · Phases: P5, P6 · Maps to Phase 9 Scenario D

 Open Exec dashboard ──▶ Read the trend ──▶ Ask AI a plain question ──▶ Get cited answer ──▶ Receive monthly report
StageDoSeeFeelRisk → design response
GlanceOpen Executive Summary templateFew big trended numbers + narrative contextOrientedOperational noise → executive template strips operational detail
Ask"How did reactive work trend this quarter?" (AI chat)Plain-language answer + chart + citationsReassuredHallucination → RAG with citations; "I don't know" beats a guess
ReceiveMonthly KPI report lands in inboxBranded PDF, EN or JA per localeTrustedUntranslated/ugly report → i18n + brand-themed PDF templates

Design must-haves: executive template = signal over detail; AI chat tone is calm and cites sources; reports are branded and locale-correct (EN/JA).


J6 — Developer integrates against the API (Sam)

Persona: Sam (Developer) · Phases: P2

 Find docs ──▶ Get API key ──▶ "Try it out" ──▶ Generate SDK ──▶ First successful call
StageDoSeeFeelRisk → design response
DiscoverOpen /api/docs (Scalar)Themed, searchable API reference + quickstartCapableStale docs → spec is source of truth, CI blocks drift
AuthAdmin issues a scoped API keyKey shown once, scopes + rate limit clearCarefulKey mishandling → "shown once" warning, copy + rotate UX
Call"Try it out" in ScalarLive response with the keyConfidentFriction → prefilled examples, copy-as-curl/SDK snippet
Scaleimport { listAssets } from "@gp/atlas-sdk"Typed hooks, versioned packageProductiveType drift → SDK generated from same OpenAPI

Design must-haves: developer portal is a real product surface (themed Scalar + quickstart), not an afterthought; error responses are designed (consistent shape, actionable messages).


Cross-journey UX commitments (apply to all)

  1. Never a dead end — every stage above has designed loading/empty/error/offline/no-permission states.
  2. Always truthful about state — "saved", "pending sync", "running", "failed" are never faked or hidden.
  3. One primary action per screen — the journey's next step is the most prominent control.
  4. Drill-through everywhere — any number, alert, or status is clickable to its source record.
  5. Transparency for trust — AI cites, workflows show steps, audit is visible, offline shows sync state.
  6. Phone-first where the user is mobile (J1, J2-approve, J4-approve) — designed for the phone, enhanced on desktop.