HERO USAGE RETIRED (07/11) — pipeline shape lives in the Lead Funnel card; pacing awaits the targets model — both atoms remain locked for later use.
Pacing + Pipeline — the Analytics hero organisms · engineering spec (PRESCRIPTIVE — design-ahead)
What they are: the two modules at the top of Sales Analytics — .sb-pacing answers "are we going to hit this month's number," .sb-pipebar answers "where do our open deals sit." Both drill down to the Desk/Leads board. Threshold grammar and zero-data law follow the DS-wide rules.
1 · .sb-pacing — Monthly Target module · TWO rows: New + Used (Fleet EXCLUDED by ruling)
New38/ 45 targetPacing 47 (+2 vs target)
WTD 8 · last wk 6
Used21/ 50 targetPacing 42 (−58 vs target)
WTD 4 · last wk 9
Each row: uppercase boldTiny gray-02 label + sold-so-far big number (semiBoldHeading5 gray-00) + "/ NN target" (gray-03) + the .sb-goalbar (6px track gray-06, r3, fill colored by pace threshold) + a pace line (mediumIndicator, threshold-colored) + a WTD/MTD compare microline (gray-03). Tap a row → the Desk filtered to Closed for that department. Two rows only — New and Used; Fleet is excluded by ruling.
2 · Threshold grammar + states — on-pace / near / behind / loading
New40/ 45 targetPacing 48 (+3 vs target)
WTD 9 · last wk 7
New30/ 45 targetPacing 42 (−3 vs target)
WTD 6 · last wk 8
Used12/ 50 targetPacing 24 (−26 vs target)
WTD 2 · last wk 5
Threshold grammar: pacing projection behind target = red-01 · within 10% of pace = orange-01 · on/ahead = green-01 — the pace line AND the goalbar fill carry the same color, always together. Loading = shimmer placeholders (bar track stays, no fill). Pacing N = month-end projection at the current daily rate; the (±N vs target) delta speaks plainly.
3 · No-targets-set empty state — never fake numbers
No targets set Targets come from dealership Settings
When leadership hasn't entered monthly targets the module NEVER invents them — headline + microcopy + a "Set targets" text-button routing to Settings. No sample bars, no placeholder pacing.
4 · .sb-pipebar — pipeline distribution bar
Fresh 1.9K Working 848 Finance 331 Close 590
Working · 848 ← hover a segment = the chart tooltip with the count.
ONE horizontal stacked bar (10px, r3), segments proportional to deals-by-processingStatus: Fresh orange-01 · Working purple-01 · Finance blue-01 · Close green-01 (the semantic status hues — never an ordered palette). Legend beneath: hue dot + label + count (boldTiny); counts use the abbreviated pill format for big numbers. Tap a segment → the Desk filtered to that status.
5 · Empty / low-adoption state — coaches adoption, never looks broken
Pipeline lives on your Leads board — start moving deals to see it here
MANDATORY: at zero data the bar renders solid gray-06 with centered coaching microcopy + an "Open Leads" text-button. It coaches adoption, never looks broken — the zero-data law: no empty rectangles, no fake distributions.
6 · Data contract
// PACING — requires the NEW targets model (no backend yet — PRESCRIPTIVE): // dealership Settings · per month · per department (New / Used) · entered by leadership. { "targets": { "month": "2026-07", "new": { "target": 45, "sold": 38, "pacing": 47, "wtd": 8, "lastWtd": 6 }, "used": { "target": 50, "sold": 21, "pacing": 42, "wtd": 4, "lastWtd": 9 } // Fleet EXCLUDED by ruling. targets == null → the no-targets empty state (never fake numbers). } } // PIPEBAR — existing deals processingStatus counts (no new backend): { "pipeline": { "Fresh": 1912, "Working": 848, "Finance": 331, "Close": 590 } // all zero → the coaching empty state; segment tap → Desk filtered by that status. }