Cedarfell Portal
WF-6.10 VD6 Active v1.0

Dashboard Layer Plan

Owner: Roger Thompson · Last updated: 2026-05-13

Defines the scope, delivery rules, and consumer expectations for the seven dashboard scorecards embedded in the portal.

Amendment 2026-05-29: BI tool is Hex Apps, not Metabase Cloud. See WF-6.9 v1.1 change log for rationale (MotherDuck connector gap in Metabase Cloud). All references to “Metabase” below should be read as “Hex” — build effort estimates remain unchanged. Substantive rewrite of this document deferred. New dashboard added: Strategic Weekly Review (owner-facing Monday capacity-economics view; live 2026-05-29). Not in the v1.0 seven-dashboard inventory below.

WF-6.10 — Dashboard Layer Plan

Type: Implementation plan Value Driver: VD6 Financial Operations (delivery infrastructure) → consumers across VD1–VD5 Version: 1.0 Date: 2026-05-13 Owner: Roger Thompson (dashboard build); BCs (daily consumers); Jana (financial consumer) Status: Active — WF-6.11 dependency cleared 2026-05-13 Companion to: WF-6.9 Dashboard Tool Decision (Hex Apps per v1.1; v1.0 originally Metabase Cloud), WF-6.11 Website Infrastructure Decision (Astro/Cloudflare), WF-6.12 Internal Portal Build Plan (portal where dashboards embed)


Purpose

Per-dashboard scope for the seven scorecard surfaces. Defines what each dashboard contains, where its data comes from (gold views per WF-6.8), how it refreshes, how it gets distributed, and what depth of interactivity it supports at each Metabase tier. This is the spec each Metabase dashboard build follows.


Scope

In scope:

Out of scope:


Design rules (apply to every dashboard)

These rules anchor every dashboard build. Lifted from the discipline that’s already operating in /Templates/Scorecard-Templates-v1.0.md and reinforced by Roger’s operating philosophy.

  1. Contract Standing gate opens every operational dashboard. Before any other metric, the dashboard answers: are we operating within FedEx contract? GREEN / YELLOW / RED status from the contract_standing_composite view (when live; before that, a manual placeholder).
  2. One owner per action surfaced. When a dashboard surfaces a decision-worthy number (e.g., “driver X is rest_candidate”), the owner of the next action is named on the card.
  3. Taxonomy wins on definitions. Every metric on every dashboard maps to a KPI ID from KPI-Taxonomy-v1.1.md. The KPI ID appears in the question’s description in Metabase.
  4. Decisions, not explanations. The dashboard surfaces the number and the threshold. It doesn’t lecture. Drill-down is for “why”; the headline is for “what.”
  5. Plan vs Actual is a first-class structure. Where FRO or AOP plans exist, the dashboard compares to actuals from WSW + Settlements. Variance is the improvement lever.
  6. Display names route through ref_driver_alias. FedEx system names and roster names differ. Every driver-level dashboard joins against ref_driver_alias to render the right human-readable name.
  7. EXP 01 and EXP CLOSE are excluded from delivery metrics. They’re holding-status routes, not delivery routes. WF-6.8 view filters apply; dashboards inherit them.
  8. Mobile-readable. BCs check from phones. Metabase responsive defaults handle most cases; per-question layout chosen with mobile in mind (e.g., one big number not a wide table).

Dashboard inventory

Seven dashboards, mapped to the six scorecards plus the Monthly Driver Scorecard built artifact (WF-4.4) which becomes its own dashboard surface.

#DashboardCadencePrimary audienceScorecard mappedPhase
1Daily BC DashboardDaily, opens 5–7 AM PacificVincent, Brandon/Templates/ Daily BC Scorecardv1 — first build
2Daily Owner DashboardDaily, opens 7 AM PacificRoger/Templates/ Daily Owner Scorecardv1
3Weekly Friday ReviewWeekly Friday morningRoger + BCs/Templates/ Weekly Scorecardv1
4Monthly Driver ScorecardMonthly, Day 1–10BC on duty, Roger/Templates/ Monthly Scorecard, WF-4.4 SOPv1 (replaces xlsx)
5Monthly P&L ReviewMonthly, Day 5–10Roger + Jana/Templates/ Monthly Scorecardv1.1
6Quarterly QBRQuarterlyRoger + Jana + BCs/Templates/ Quarterly Scorecardv1.1
7Annual ReviewAnnualRoger + Jana/Templates/ Annual Scorecardv2

Build sequence:


Dashboard 1 — Daily BC Dashboard

Primary audience. Vincent, Brandon. The first thing each BC opens at the belt every morning.

Cadence. Daily. Refreshes overnight by 4 AM Pacific; BCs check between 5–7 AM.

Distribution.

Embed mode. Static iframe at Starter tier (1 CSA). Interactive at Pro tier (5+ CSAs).

Block 1 — Contract Standing gate. GREEN / YELLOW / RED across the day’s standing.

MetricKPI IDGold viewRefreshNotes
Composite standing(Apex 2)contract_standing_composite (P1)1x daily 4 AMPre-launch placeholder: manual color set by BC each morning
RYDE 7-day rollingOP.VD4.04vedr_event_summary join + RYDE source1x dailySource dependency on RYDE capture SOP
MEDALS status(composite input)manual flag (no view yet)manualMatthew Raskopf Day 3 accident impact through Jun/Jul 2026
Safety status(composite input)vedr_event_summary (P1)1x dailyConfirmed VEDR events / driver running 30-day window

Block 2 — Yesterday’s Results. Per-route + fleet aggregate. Fully buildable from existing P0 views.

MetricKPI IDGold viewRefreshNotes
Stops delivered, per routeOP.VD2.01daily_route_summaryHourly during morning, daily otherwiseDisplay names via ref_driver_alias
Completion %OP.VD4.01daily_route_summaryHourly
ILS %OP.VD4.02daily_route_summaryHourly
DNAsOP.VD4.03daily_route_summaryHourlyDrill-down to exception code mix
SPH (stops per hour)OP.VD2.04daily_route_summaryHourly
Hours worked, per driver(computed)daily_route_summaryHourlyFrom GroundCloud Timecard
Fleet aggregate rowdaily_csa_summaryHourlyOne-row summary across all routes

Block 3 — Today’s Plan. Today’s route plan from RouteSmart capture. Currently blocked by WF-2.4 capture not flowing. v1 launches without Block 3; backfilled when bronze_routesmart_plan populates.

MetricKPI IDGold viewRefreshStatus
Routes scheduledOP.VD2.05(pending RouteSmart bronze)Blocked on WF-2.4 capture
Projected stops, per route(pending)Blocked
Drivers assigned(pending)Blocked

Block 4 — Blockers / Staffing. Who needs attention before dispatch.

MetricKPI IDGold viewRefreshNotes
Drivers absent todayOP.VD5.07attendance_summary (P1) — pre-launch via direct GroundCloud Timecard callHourlyOwner of next action: BC on duty
Rest candidatesOP.VD2.08driver_staffing_statusHourlyDriver hit 5 consecutive 10+ hr days
Extra shift candidatesOP.VD2.09driver_staffing_statusHourlyDriver scheduled but underutilized
Borrowed drivers in useOP.VD1.09borrow_utilization_by_source (P1)DailyReliant first-named source
Open exceptions from yesterdayOP.VD4.05exception_root_cause (P1)HourlyDrill to per-driver

Block 5 — Action items. Manual entry; surfaces what each BC needs to do today. Lives in Metabase as a markdown text card the BC on duty edits each morning, or as a separate /dashboards/daily-bc#actions section linked from the dashboard.

Drill-downs available.

Open dependencies.

Build effort. 1.5 days in Metabase. Aligns with WF-6.12 Phase C.


Dashboard 2 — Daily Owner Dashboard

Primary audience. Roger. Single morning check at 7 AM Pacific.

Cadence. Daily. Refreshes overnight by 4 AM; Roger checks between 7–8 AM.

Distribution.

Embed mode. Static iframe.

Differences from BC dashboard. Roger sees the same operational data plus a few owner-level items:

BlockWhat’s different from BC
1 Contract StandingSame — Roger acts on YELLOW/RED escalations
2 Yesterday’s resultsSame operational data + a one-line cash position from thirteen_week_cash_flow
3 Today’s planSame (when Block 3 unblocks)
4 Blockers/staffingHigher-level: count of issues, not per-driver detail
5 Cash + SettlementYesterday’s settlement amount + weekly trend
6 Open exceptionsSame; emphasizes those still open after 24 hrs

Additional metrics on Owner dashboard.

MetricKPI IDGold viewRefresh
13-week cash forecastFIN.07 / FIN.08 / FIN.09thirteen_week_cash_flow (P1)Daily
Weekly settlement trendweekly_settlement_summary (P0)Daily
Recruiting funnel rolled (today)OP.VD1.10recruiting_funnel_daily (P1)Daily

Drill-downs available.

Open dependencies.

Build effort. 1 day in Metabase. Reuses Daily BC questions where possible. WF-6.12 Phase C / D.


Dashboard 3 — Weekly Friday Review

Primary audience. Roger + BCs. Friday morning sync (existing meeting cadence).

Cadence. Weekly. Refreshes Thursday end-of-day; reviewed Friday morning.

Distribution.

Embed mode. Static iframe v1; interactive at Pro tier.

Block 1 — Contract Standing weekly trend. Same composite as daily, but trended over the past 4 weeks.

Block 2 — Operational summary (Mon–Sun).

MetricKPI IDGold viewRefresh
Stops delivered, by dayOP.VD2.01 weeklyweekly_driver_summary (P0)Daily
Completion % rollingOP.VD4.01 weeklyweekly_driver_summaryDaily
ILS % rollingOP.VD4.02 weeklyweekly_driver_summaryDaily
OT hours this weekOP.VD5.04ot_summary_weekly (P0)Daily
Stop pay this weekOP.VD6.03stop_pay_weekly (P0)Daily
Driver scorecard previewOP.VD5.03weekly_driver_summaryDaily

Block 3 — Financial week-in-review.

MetricKPI IDGold viewRefresh
Settlement actualsOP.VD6.01weekly_settlement_summary (P0)Daily
Cost per stop rollingOP.VD6.05cost_per_stop_weekly (P1)Daily
Cost per mile rollingOP.VD6.06cost_per_mile_monthly (P1)Daily
Fuel efficiency rollingOP.VD3.08fuel_efficiency_monthly (P1)Daily

Block 4 — Plan vs Actual (when WF-2.4 captures flow).

MetricKPI IDGold viewRefresh
Planned vs actual stops(variance)daily_route_summary join bronze_routesmart_planDaily
Planned vs actual labor hours(variance)joinDaily
Variance trendderivedDaily

Block 5 — Issues + decisions for the meeting. Manual text card; BCs and Roger add issues during the week, decisions go into Decisions-Log.md after.

Drill-downs available.

Open dependencies.

Build effort. 1.5 days in Metabase. WF-6.12 Phase D.


Dashboard 4 — Monthly Driver Scorecard

Primary audience. BC on duty (during scorecard month), Roger (review), drivers (one-page printable per WF-4.4).

Cadence. Monthly. Built Day 1 of next month; Roger reviews Day 3; drivers receive Day 5–10.

Distribution.

Embed mode. Static iframe v1; interactive at Pro tier (drill-down to per-driver detail).

This dashboard replaces the xlsx workflow in WF-4.4. The xlsx workbook stays available as a backup, but the canonical source becomes the Metabase dashboard reading from monthly_driver_scorecard (P0 materialized gold table — 8 rows current partial-May load per memory; full month-end load after May closes).

Block 1 — CSA Average row. Anonymous, all-driver aggregate.

MetricKPI IDGold view columnNotes
ILS %OP.VD4.02monthly_driver_scorecard.ils_pct
DNA / 1000OP.VD4.03monthly_driver_scorecard.dna_per_1000
RYDE scoreOP.VD4.04monthly_driver_scorecard.ryde_score
5-star reviewsOP.VD4.06monthly_driver_scorecard.count_5_star
1-star reviewsOP.VD4.07monthly_driver_scorecard.count_1_star
SPHOP.VD2.04monthly_driver_scorecard.sph
Completion %OP.VD4.01monthly_driver_scorecard.completion_pct
VEDR eventsOP.VD4.10monthly_driver_scorecard.vedr_events
Attendance call-outsOP.VD5.10monthly_driver_scorecard.attendance_callouts

Block 2 — Top Driver row. Anonymous, z-score-ranked top performer for the month. Disqualified by VEDR events > 0 or accident on record (per WF-4.4 design).

Same 9 metrics, Top Driver values.

Block 3 — Per-driver detail. One driver selected; full scorecard with banding (Red/Yellow/Green per WF-4.4 threshold reference).

Selector: driver dropdown (joined to ref_driver to display roster names).

Block 4 — Trends. 12-month trailing chart per metric. Trends are read-only at Starter tier; interactive at Pro.

Block 5 — Printable view. Print-CSS-styled view that produces the same one-pager /VD4 - Service Quality/Data/Monthly-Driver-Scorecard-v1.0.xlsx Individual-Scorecard sheet produces. BC prints; hands to driver per WF-4.4.

Drill-downs available.

Migration from xlsx (per WF-4.4). The xlsx workflow stops at v1 launch; the Metabase dashboard becomes canonical. The populate_scorecard.py script in the dev repo (which previously bridged gold view → xlsx) is repurposed if a CSV export is needed for external reporting.

Open dependencies.

Build effort. 2 days in Metabase. The most complex of the v1 dashboards. WF-6.12 Phase D.


Dashboard 5 — Monthly P&L Review

Primary audience. Roger + Jana. Monthly close review.

Cadence. Monthly. Refreshes Day 1 of next month after Tensor closes books (typical Day 5–10 close cadence).

Distribution.

Embed mode. Static iframe v1. Interactive at Pro tier (Jana drills down to GL accounts).

Block 1 — P&L summary.

MetricKPI IDGold viewRefresh
RevenueFIN.01monthly_pnl_rollup (P0)Daily after month-end
COGS (labor + fuel + truck + insurance)FIN.02monthly_pnl_rollupDaily
Gross marginFIN.03monthly_pnl_rollupDaily
SG&AFIN.04monthly_pnl_rollupDaily
Net incomeFIN.05monthly_pnl_rollupDaily
Net margin %FIN.06 (Apex 1)monthly_pnl_rollupDaily

Block 2 — Variance vs prior month. Same line items, % change.

Block 3 — Variance vs AOP plan (when AOP exists).

MetricKPI IDGold viewNotes
Plan vs actual P&L(variance)aop_variance_monthly (P2)Blocked on AOP build
Variance commentarymanual textRoger + Jana note material variances

Block 4 — Cost structure breakdown.

MetricKPI IDGold view
Labor as % of revenueFIN.10monthly_pnl_rollup
Fuel as % of revenueFIN.11monthly_pnl_rollup
Truck as % of revenueFIN.12monthly_pnl_rollup
Insurance as % of revenueFIN.13monthly_pnl_rollup

Block 5 — Cash position.

MetricKPI IDGold view
Month-end cashFIN.07thirteen_week_cash_flow (P1)
13-week forecastFIN.08thirteen_week_cash_flow
Runway (months)FIN.09derived

Drill-downs available.

Open dependencies.

Build effort. 2 days in Metabase. Includes Jana onboarding (her first Metabase session). v1.1 — targets August 2026 once Tensor month-end practice is consistent.


Dashboard 6 — Quarterly QBR

Primary audience. Roger + Jana + BCs. Quarterly Business Review meeting.

Cadence. Quarterly. Refreshes first business day after quarter close.

Distribution.

Embed mode. Static iframe v1.1; interactive at Pro tier for deep dives during meeting.

Block 1 — Apex Scorecard. Apex 1 (Financial Outcome) + Apex 2 (Contract Standing) trended across the quarter.

Block 2 — Quarterly operational.

MetricKPI IDGold view
Turnover quarterOP.VD5.05turnover_summary_quarterly (P0)
Driver scorecard band distributionOP.VD5.03derived from monthly_driver_scorecard
Sit-the-route eventsOP.VD1.08sit_route_events (P1)
2 PM borrow ceiling hitsOP.VD1.13two_pm_borrow_ceiling_daily (P1)
Coverage source mixOP.VD1.09borrow_utilization_by_source (P1)
Breakdown countOP.VD3.10breakdown_summary_quarterly (P1)

Block 3 — Strategic indicators.

MetricKPI IDGold view
Swan Island break-even progressSTR.ANCILLARY.06swan_island_break_even_monthly (P2)
Compliance automation coverageSTR.OPS.01compliance_automation_coverage (P2)
Playbook replicability scoreSTR.EXIT.04manual rubric
Data warehouse maturitySTR.EXIT.06manual rubric

Block 4 — Quarter narrative. Manual text — what happened, what changed, what’s next. Owned by Roger; reviewed by Jana + BCs.

Block 5 — Decisions made this quarter. Pulled from Decisions-Log.md filtered to the quarter window.

Drill-downs.

Open dependencies.

Build effort. 2.5 days in Metabase. v1.1 — targets October 2026 (post-Q3 close).


Dashboard 7 — Annual Review

Primary audience. Roger + Jana. Annual planning + tax-period close + AOP build for next year.

Cadence. Annual. Builds in December (preliminary) and January (final after Y close).

Distribution.

Embed mode. Static iframe v2.

Block 1 — Year-over-year P&L.

Block 2 — Apex Scorecard year trended.

Block 3 — Strategic year-end summary.

Block 4 — Driver tenure + retention summary. Per-driver scorecard rolled annual; tenure buckets; retention rate.

Block 5 — Quarter-by-quarter recap. 4 mini-quarterly summaries.

Block 6 — Annual decisions log summary. All material decisions from Decisions-Log.md for the year.

Block 7 — AOP comparison + next-year plan. Manual; outputs feed into next year’s AOP.

Open dependencies.

Build effort. 2 days in Metabase, leveraging Monthly + Quarterly questions. v2 — targets January 2027.


Refresh schedules summary

DashboardSource views refreshDashboard auto-refresh
Daily BCHourly (5 AM – 10 AM Pacific), daily otherwiseOn-page-load + auto every 15 min during morning hours
Daily OwnerDaily 4 AMOn-page-load
Weekly FridayDailyOn-page-load
Monthly ScorecardDaily after month-endOn-page-load
Monthly P&LDaily after month-end (after Tensor close)On-page-load
Quarterly QBRDaily after quarter-endOn-page-load
Annual ReviewDaily after year-endOn-page-load

Implementation note: Metabase Cloud refreshes question cache on a schedule (per-question, configurable). Dashboards display cached data; on-page-load triggers a cache check. Setting per-question schedules avoids needless compute against MotherDuck.


Distribution channels summary

ChannelUse caseTier requiredNotes
Portal embedAll dashboardsStarter (static) or Pro (interactive)Primary distribution
Email digestDaily Owner, Weekly Friday, Monthly P&L (PDF)Pro tier (Metabase Subscriptions)Set per-dashboard
Slack alertThreshold breaches on Daily BC + OwnerStarter (basic), Pro (richer)Channel: #cedarfell-alerts (TBD; Slack still in setup per CLAUDE.md)
PrintMonthly Driver Scorecard one-pagerEither tier with print-CSSReplaces xlsx printable
Scheduled CSV/Excel exportQuarterly, AnnualProOptional, for Jana’s archives

Slack alert thresholds for v1:


Embedding tier capability summary

CapabilityStarter ($1K/yr at 1 CSA)Pro ($6K/yr at 5+ CSAs)
Iframe embed✅ Static, public-with-token✅ Interactive, JWT-signed
Filtering inside iframe❌ Read-only✅ Yes
Drill-down inside iframe❌ Click opens Metabase in new tab✅ Inline drill-down
Date range adjustment
Row-level security based on identity
Email subscriptionsLimited✅ Full
Slack subscriptionsLimited✅ Full
Number of dashboardsUnlimitedUnlimited
Users included510

Upgrade trigger: 5th CSA. Until then Starter is sufficient because the v1 dashboards are designed read-only — interactivity is a Pro perk, not a requirement.


Build sequence with WF-6.12 phasing

WF-6.12 PhaseDayDashboard workStatus
C3Daily BC Dashboard in MetabaseBuild during Metabase trial
C4Daily BC validated with BCsOne real morning of use
D5Daily Owner DashboardReuses Daily BC questions
D6Weekly Friday ReviewNew questions + reuse
D7Monthly Driver ScorecardReplaces xlsx workflow
(post-v1)Monthly P&L Reviewv1.1, August 2026 target
(post-v1)Quarterly QBRv1.1, October 2026 target
(post-v1)Annual Reviewv2, January 2027 target

Open dependencies (full inventory)

#DependencyBlocks dashboard(s)OwnerTrigger
1RouteSmart capture (WF-2.4) flowing to bronzeDaily BC Block 3, Weekly Block 4 plan/actualBC on dutyImplementation already drafted; pending operational rollout
2VEDR event capture (WF-4.5 proposed)Contract Standing composite, Monthly ScorecardBoth BCs (per Roger 2026-04-30 mandate)SOP to be drafted
3RYDE monthly capture (WF-6.5 proposed)Contract Standing, Monthly ScorecardBC on dutySOP to be drafted
4Attendance log SOP (WF-5.2 amendment / WF-5.4)Daily BC Block 4, Monthly ScorecardAaliyah or BCSOP to be drafted
5Coverage Event Log capturecoverage_event_summary, sit_route_events, borrow_utilizationBC on dutyPer WF-1.4 §10
6Cash balance logthirteen_week_cash_flowRoger or JanaCapture method TBD
7Tensor GL bronze ingestionMonthly P&LJana / Tensor parserIngestion cadence to be agreed
8Allocation rules (overhead, service-charge, eComm-Ground revenue split)route_profitability_weekly, aop_variance_monthlyRogerRoger decision
9AOP build for current yearAOP variance dashboardsRogerAnnual cycle
10Tensor entity-separated reporting (Cedarfell vs Swan Island)swan_island_break_even_monthlyJana / TensorTensor account structure
11Compliance registercompliance_automation_coverageAaliyah (or her successor at Swan Island)Register build
12Tensor email addresses (Jana, Sheryl) for Cloudflare AccessMonthly P&L, QuarterlyAaliyahBefore v1.1 launch
13Slack channel for alertsAll daily dashboardsRoger (Slack admin)Slack setup completion

Cross-references


Change log

VersionDateAuthorChange
1.02026-05-13Roger Thompson (with Claude)Initial plan. Seven dashboards mapped to scorecard cadences. v1 ships 4 (Daily BC, Daily Owner, Weekly Friday, Monthly Driver Scorecard). v1.1 adds Monthly P&L + Quarterly QBR (August–October 2026). v2 adds Annual Review (January 2027). Build sequence anchored to WF-6.12 Phase C and D. Tier capability differences documented (Starter static vs Pro interactive). 13 open dependencies catalogued.

Appendix A — Question library plan

Each Metabase dashboard is composed of “Questions” (saved SQL queries with chart spec). Building a library of reusable questions reduces duplication across dashboards:

Question library categoryExamplesReused across
Per-driver dailyStops, ILS, completion, SPHDaily BC, Weekly, Monthly
Fleet aggregate dailyAll-route summary rowDaily BC, Daily Owner
Driver staffing flagsrest_candidate, extra_shift_candidateDaily BC, Daily Owner
Settlement summariesDaily, weekly, monthlyDaily Owner, Weekly, Monthly P&L
Cost structureLabor %, Fuel %, etc.Monthly P&L, Quarterly
Apex compositesContract Standing, Net marginAll scorecards
Trend lines30-day, 12-month, YTDMonthly Scorecard, Quarterly, Annual

Library lives in a Metabase Collection called Cedarfell Question Library. Each dashboard references questions from the library rather than re-implementing SQL inline. Naming convention: <KPI ID> — <metric name> (e.g., OP.VD4.02 — ILS % daily).


Appendix B — Slack alert channel setup

When Slack is operational (currently in setup per project context):

Channel: #cedarfell-alerts

Subscribers: Roger, Vincent, Brandon, Aaliyah.

Alert types and triggers:

AlertTriggerSeverityOn-call action
Contract Standing → YELLOWcontract_standing_composite color = YELLOWMediumBC reviews leading indicators
Contract Standing → REDcomposite color = REDHighBC + Roger sync within 1 hour
Driver rest_candidate scheduled todaydriver_staffing_status.rest_candidate = TRUE AND scheduled todayMediumBC reassigns or confirms with driver
OT spend over planYTD OT > AOP OT × 1.1MediumRoger reviews; BC adjusts staffing approach
Settlement varianceWeekly settlement < prior week × 0.85HighRoger + Jana investigate
VEDR event confirmedNew row in bronze_vedr_events with confirmed = TRUEMediumBC initiates coaching per WF-4.3
Breakdown reportedNew row in breakdown_eventsHighMechanic + BC trigger WF-3.3 protocol

Alerts post to Slack via Metabase’s Slack integration (Pro tier feature; Starter tier supports email-only).


Appendix C — Mobile considerations

BCs check from phones at the belt. Per-question design rules:

  1. One number bigger than the rest. Each block has one headline number; everything else is supporting.
  2. No wide tables. Tables over 4 columns require horizontal scrolling on phones. Use card layouts for per-route detail.
  3. Color before text. GREEN / YELLOW / RED is faster than reading a value + threshold.
  4. Tap targets large. Drill-down links sized for thumbs; Tailwind min-h-[44px] for clickable elements.
  5. Loading state visible. If the dashboard takes >2 seconds to load, a skeleton shows. Metabase handles this by default.

The Daily BC Dashboard specifically is tested on a phone before launch — that’s the highest-stakes mobile use case.