Skip to Content

← All archived runs

Run: sdm-dashboard-parity

run.md

Run: sdm-dashboard-parity

  • branch: claude/sdm-dashboard-parity-15zdd6
  • pr: #701

01_define/output/spec.md

Spec: SDM dashboard parity

  • slug: sdm-dashboard-parity
  • personas: SDM
  • touches: apps/web/components/dashboard/sdm, apps/demo/components/dashboard/sdm
  • complexity: standard

Problem

Web's SDM dashboard has regressed from the demo design that is meant to be its source of truth, weakening the at-a-glance supply/quality signal the SDM relies on to manage expert supply. The action strip lost all RAG colouring (red revenue / amber risk / emerald gaps became three plain uncoloured cards, with dead transition-colors remnants); the market-signals and service-performance StatBoxes were forced to variant="neutral", dropping demo's info/warning/expansion colour coding; the service-performance "Revenue at risk" rows lost their red emphasis; and the vendor-take % / margin % subtexts are no longer displayed. Separately the expert-strength table has diverged into a different shape (demo 6-col ranked vs web 12-col server-driven) and the demand coverage vocabulary differs between the two apps. This advances Refine the Bridge / Q2 2026 — O1 vendor engagement: the SDM manages expert supply and quality, and a dashboard whose RAG signal is broken directly blunts that objective.

Proposed change

Restore demo's SDM dashboard design in web and reconcile the two apps to a single agreed shape:

  • Re-apply the action strip's conditional RAG colouring (red revenue / amber risk / emerald gaps) including coloured icons, and remove the dead transition-colors remnants.
  • Restore the demo StatBox variants (info/warning/expansion) on the market-signals and service-performance sections, and make the vendor-take % / margin % subtexts visible again.
  • Restore the red emphasis on service-performance "Revenue at risk" rows.
  • Reconcile the expert-strength table to one canonical column set. Web's richer 12-col server-driven table wins; back-port it into demo as the design source of truth (with per-persona mock data) and update the demo subtitle to match. Preserve demo's ranked strong/ok/at-risk status semantics on top of the richer columns so both apps share the same status vocabulary.
  • Unify the demand coverage-status vocabulary and gap rendering (badge vs text) so both apps agree.
  • While in these files, normalise web's SDM sections off raw var(--bg-card) onto semantic tokens.

Acceptance criteria

  • SDM action-strip cards show demo's conditional red/amber/emerald colouring plus coloured icons, with no dead transition-colors classes remaining.
  • Market-signals and service-performance StatBoxes use demo's info/warning/expansion variants, and the vendor-take % / margin % subtexts are visible.
  • Service-performance "Revenue at risk" rows carry demo's red emphasis.
  • The expert-strength table renders one agreed column set (web's 12-col) in both web and demo, with matching strong/ok/at-risk status semantics and the demo subtitle updated to match.
  • The demand coverage-status vocabulary and gap rendering match between web and demo.
  • Web's SDM sections use semantic tokens rather than raw var(--bg-card).

Out of scope

  • The SDM "My area" panel — covered by the separate stub csm-sdm-panels-in-demo.
  • The web-only risks OutreachControl — an intentional web enrichment; leave it as a documented divergence, do not remove or port it.
  • Any change to the server data model / query behind the web expert-strength table (the columns already exist server-side); this run is presentation parity only.

Open questions

  • none — the expert-strength canonical column set is decided (web's 12-col wins, back-ported into demo). Demo will use per-persona mock data for the added columns.

02_build/output/notes.md

Build notes: sdm-dashboard-parity

  • commits: feat: sdm-dashboard-parity — restore SDM RAG design in web + reconcile expert-strength & demand tables

What changed

Direction of parity (per spec): demo is the design source of truth for styling, so web adopts demo for the visual items (action strip, StatBox variants, red risk rows, demand table). The one explicit exception is the expert-strength table, where web's richer 12-col server-driven shape wins and is back-ported into demo.

  • apps/web/.../sdm/action-strip.tsx: re-applied demo's conditional RAG colouring — red "Revenue at risk" card, amber/neutral "Immediate risks", amber/emerald "Gaps not covered" — with coloured icons and value text. The dead transition-colors remnants are now live conditional classes.
  • apps/web/.../sdm/market-signals-section.tsx: Low bids → info, Market bids → warning, High bids → expansion StatBox variants (were all neutral); the by-band table wrapper moved off raw var(--border)/var(--bg-card) onto border-border/bg-card and gained min-w-max.
  • apps/web/.../sdm/service-performance-section.tsx: Vendor take → warning, Estimated margin → expansion StatBox variants, each with its %-subtext visible (mapped demo's subtext onto web StatBox's hint prop — web's StatBox has no subtext/className prop). "Revenue at risk" rows restored to demo's red emphasis (red border/bg/text). Removed all raw var(--*) tokens (--text-primary, --text-secondary, --bg-card, --bg, --bg-hover); link recoloured blue-600text-primary.
  • apps/web/.../sdm/demand-table.tsx: adopted demo's two-badge coverage presentation — Coverage status now renders a badge off readinessStatus (green→Covered, amber→At risk, red→Not coverable), and Coverage gap renders a badge off coverageStatus (Fully covered→Covered, Partial→Partial, Not covered→Not covered), replacing the old red −{shortfall} text. This makes the coverage-status vocabulary and gap rendering identical to demo. Added min-w-max + matched the tab-toggle styling.
  • apps/web/.../sdm/expert-strength-row.tsx: status badge moved to the soft semantic vocabulary (okinfo "Ok"; at-riskerror "At risk") so both apps share one status rendering. The 12-col table itself was already canonical, so no structural change.
  • apps/demo/.../sdm/expert-strength-table.tsx + expert-strength-row.tsx: back-ported web's 12-col table (Expert · Skills · Region · Active work · SLA % · CSAT · Escalation % · Completion % · Repeat % · Demand/supply/gap · Availability · Status) replacing the old 6-col SLA-ranked view. The demo mock already carried every column, so no mock reshape was needed. Status badge matches web (strong→success, ok→info, at-risk→error); row highlight via the shared rowBg(status). Subtitle updated to web's "Per-expert supply quality across the SDM's area".

Acceptance criteria status

  • SDM action-strip cards show demo's conditional red/amber/emerald colouring plus coloured icons, with no dead transition-colors classes remaining — the classes are now driven by immediateRisks/gapsNotCovered.
  • Market-signals and service-performance StatBoxes use demo's info/warning/expansion variants, and the vendor-take % / margin % subtexts are visible (via StatBox hint).
  • Service-performance "Revenue at risk" rows carry demo's red emphasis.
  • The expert-strength table renders web's 12-col set in both web and demo, with matching strong/ok/at-risk status semantics; demo subtitle updated to match.
  • The demand coverage-status vocabulary and gap rendering match between web and demo (both now render two badges with identical labels/variants).
  • Web's SDM sections use semantic tokens rather than raw var(--bg-card) — no var(--*) remains under apps/web/components/dashboard/sdm/.

Verify result

  • mechanical checks (format · lint · typecheck · build) run in CI + the Vercel preview, not here. One thing to watch: demo enforces --max-warnings 0 — the demo expert-strength files were rewritten with no unused imports, so this is expected clean.

Notes for review

  • The expert-strength status highlight now follows web's rowBg semantics (only at-risk rows get an amber tint; the old demo view also tinted strong rows emerald). This is intentional — web is canonical for this table.
  • The web StatBox and demo StatBox are separate components with different prop names (hint vs subtext); parity is at the rendered level, not the prop level. No StatBox component was changed.
  • Web's action strip and service-performance risk rows use raw Tailwind palette classes (bg-red-50, border-amber-200…) to match demo exactly — this is in apps/web (the demo-only "use tokens" rule does not apply here) and is what pixel-parity with the demo design requires.

03_release/output/changelog.md


title: Your SDM dashboard's colour-coded supply and quality signals are back date: 2026-07-27T11:23:45Z personas: [sdm] slug: sdm-dashboard-parity pr: https://github.com/sustentus/sustentus/pull/701

Your SDM dashboard's colour-coded supply and quality signals are back

Your SDM dashboard now reads at a glance again. The top action cards are colour-coded once more — red for revenue at risk, amber for immediate risks, and green when gaps are covered — each with a matching icon. Market and service figures carry their colour coding back, and vendor take and margin now show their percentages beneath the amount. Revenue-at-risk rows stand out in red, the coverage labels for go-live demand read the same everywhere, and the expert strength table shows the fuller per-expert view — skills, region, SLA, CSAT, escalation, completion, repeat rate, and demand versus supply — so you can see where your expert supply is strong and where it needs attention.

03_release/output/investor-update.md

The SDM dashboard's supply-and-quality signal is restored

Who it's for: SDMs (service delivery managers) What shipped: The SDM dashboard's colour-coded RAG signals, percentage subtexts, and fuller expert-strength view are restored and reconciled across web and demo. Why it matters: Sharper dashboard usability under Refine the Bridge, supporting Q2 Objective 1 — establish product-market fit with vendor partners.

All six acceptance criteria met; previews build clean.

Dig deeper: <merged-PR URL> · <changelog entry URL>

03_release/output/release.md

Release: sdm-dashboard-parity

  • pr: #701 (https://github.com/sustentus/sustentus/pull/701) · merged: pending (gate ticked, squash-merging)
  • CI: green — "Quality Project" (format · lint · typecheck · build) success; preview + prod DB migrate success/skipped; Claude review job skipped (ENABLE_CLAUDE_REVIEW not set) so the diff was self-reviewed at medium effort
  • technical docs: no technical docs impact — presentation parity only; no new/changed app, package, route, env var, build step, or architecture (apps/docs has no page describing the SDM dashboard's columns/vocabulary)
  • business docs: no business docs impact — the SDM's capabilities are unchanged (supply/quality, coverage, revenue-at-risk views); only their presentation was restored/reconciled
  • release notes: both — changelog entry (apps/help/app/changelog/2026-07-27-sdm-dashboard-parity) + investor draft in this PR
  • sent: pending — investor update to be sent after merge

Review summary

  • Demo expert-strength-row copied web's raw <span> for the expert name — switched to Typography as="span" to follow the dashboards Typography convention (and the original demo row's style). Fixed on branch. (Not lint-enforced; demo raw spans exist elsewhere, so not CI-blocking, but corrected for consistency.)
  • Web action-strip / service-performance risk rows use raw Tailwind palette classes (bg-red-50, border-amber-200…) — accepted: this is apps/web (the token-only rule is demo-only) and pixel-parity with the demo design requires the same classes.
  • Direction of parity is coherent: demo is the styling source of truth (web adopts it for colours/StatBoxes/red rows/demand table); web's richer 12-col expert-strength table is the one explicit exception, back-ported into demo — exactly as the approved spec decided.
  • No dead code, debug, or leftover scaffolding found. Removed var(--*) usages and the old demo 6-col ranking logic.

Acceptance check (vs spec)

  • SDM action-strip cards show demo's conditional red/amber/emerald colouring + coloured icons, no dead transition-colors — classes now driven by immediateRisks/gapsNotCovered.
  • Market-signals & service-performance StatBoxes use demo's info/warning/expansion variants; vendor-take % / margin % subtexts visible (via StatBox hint).
  • Service-performance "Revenue at risk" rows carry demo's red emphasis.
  • Expert-strength renders web's 12-col set in both apps; matching strong/ok/at-risk status semantics; demo subtitle updated.
  • Demand coverage-status vocabulary + gap rendering match between apps (both render two badges, identical labels/variants).
  • Web SDM sections use semantic tokens — no var(--*) remains under apps/web/components/dashboard/sdm/.