Design preview · #4110 · for Zahid's call

Per-shift fatigue visibility

The day is a finite envelope. One capacity meter answers the manager's and the driver's shared question, how much is done and how much is left, with prestart made visible instead of surprising. All data already ships on the API.

Direction A, capacity meter Recommended

One segmented bar = the 13h on-duty envelope. Solid mint = work, light mint = prestart (the "hidden" time that caused Drew's confusion, now literally visible), grey = breaks, track = headroom. The 12h work cap rides as a stat, not a second bar. Linear-style: quiet track, tabular numerals, one focal element.

Console — shift drawer, below the header badges
Fatigue · Thu 2 Jul Settings at submission
11h 48m of 13h on duty 1h 12m left
Work Prestart Breaks
Work
10h 18m / 12h
Breaks
30m
Prestart
3 × 26m
Shifts
3
This shift 4h + 26m prestart = 4h 26m on duty Continuous shift
Mobile — driver, above the shift plan
Today
Your hours across all shifts, prestart included
11h 48mof 13h 1h 12m left
This shift 4h + 26m prestart
Break carried over from your last shift, due 4h after your last break taken.

Direction B, stat ledger Alternate

No chart. Four quiet tiles + the shift line. Denser, zero learning curve, but the envelope ("how close am I?") is a number to compute, not a shape to see. Same components exist today (stat tiles).

Console — shift drawer
Fatigue · Thu 2 Jul Settings at submission
On duty
11h 48m
Left today
1h 12m
Work
10h 18m / 12h
Breaks
30m
This shift 4h + 26m prestart = 4h 26m on duty Continuous shift

States, direction A

Semantic tokens carry the risk state; the layout never changes. Warning inside 1h of a limit (mirrors the rule engine's 30m warn lead, widened for display), error at or over. Empty day = block hidden, no zero-state noise.

Approaching, under 1h left → warning-*
12h 22m of 13h on duty38m left
At or over the limit → error-*
13h 56m of 13h on duty56m over
Dark mode, console tokens hold
11h 48m of 13h on duty1h 12m left

The calls that are yours

DecisionOptionsMy recommendation
DirectionA meter · B ledgerA — the envelope is the story; a bar shows closeness, tiles make you do maths
Prestart encodingLight-mint segments · merged into workLight mint — prestart being invisible is exactly what confused Drew and Mark
Per-shift segmentsSegmented per shift (2px gaps) · one continuous fillSegmented — reads "4 shifts" at a glance, hover names each shift on console
Provenance"Settings at submission" tooltip · omit from UITooltip — auditors and CSMs need it; one quiet dashed link, zero pixels of noise
Mobile placementAbove the shift plan card · inside ShiftCockpitAbove shift plan — visible in every phase, not just live shifts
12h work capStat only · second barStat only — two bars double the ink for a number that moves with the first

Copy spec: sentence case throughout; "on duty" / "left" / "This shift", never "envelope" or "duty period" in UI. Numbers always Xh Ym, tabular. i18n keys mirror console ↔ mobile. Implementation reuses existing primitives: console stat tiles + Pill + Tooltip, mobile card + StatusPill; meter is the one new shared-shape component (built per platform per the no-shared-package rule).