Repository navigation
feat(frontend): dashboard on the redesign layout #901
Copy link
Copy link
Closed
Labels
area:frontendReact, /srcReact, /srcpriority:P1-highBlocks a milestoneBlocks a milestonestatus:in-reviewPR openPR opentier:4-uxUX: polish on top of a working engineUX: polish on top of a working enginetype:featureNew user-facing capabilityNew user-facing capability
Milestone
Description
Problem
The dashboard is the landing page. The design gives it a clear reading order: incident banner, three summary cards, score trend and risk matrix, then priorities and recent activity. The view still depends on the account's role; the design's role switch is not built.
Design: https://claude.ai/artifact/HLqrbeYqvv4a6RVnBz9Vei (screen "dashboard"). Parent: #899. The rules in the epic apply.
Acceptance criteria
- Header: date and data timestamp eyebrow, "Tableau de bord" title, our period control where the role switch was.
- An active P1/P2 incident shows the design's red banner with a link to its war room; MFA and onboarding banners stack below it.
- Security score card: value /100, band pill, 30-day delta, one bar per real factor with its weight, footnote with the weight sum.
- Annualised exposure card: total, stacked bar by band with legend, residual after plan and P95, each from the financial summary.
- Four counters (critical risks, KEV vulnerabilities, active incidents, compliance coverage), each linking to its filtered page.
- 12-month score trend chart and a 5×5 risk matrix; the binning of our P (0–1) and I (0–10) into five columns each is documented in the code and on this issue.
- "À traiter en priorité" (top five from the action center) and "Activité récente" (last six events), each with its "see all" link.
Definition of done
- The screen matches the design at 1440×900 in dark and light, checked side by side in a real browser; the comparison and any deliberate difference are written on this issue.
- Loading skeleton, error with retry, and empty state exist for every block.
- FR and EN strings, no hard-coded copy.
npx tsc -b --noEmit,npx vitest runon the touched features, andnpx eslinton the touched files pass.- Backend changes, if any, come with
TestXxx_Success,TestXxx_NotFound,TestXxx_Unauthorized, filter bytenant_id, andgo test ./...passes. - PR opened with
Closes #<this issue>; parent epic epic(frontend): rebuild every console screen on the October 2026 redesign #899.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:frontendReact, /srcReact, /srcpriority:P1-highBlocks a milestoneBlocks a milestonestatus:in-reviewPR openPR opentier:4-uxUX: polish on top of a working engineUX: polish on top of a working enginetype:featureNew user-facing capabilityNew user-facing capability
Activity
alex-dembele commentedon Oct 8, 2026
dashboard redesign — 2026-10-08
Done — PR #926 on
feat/901-dashboard, stacked on #925. Pagefeatures/dashboard/ConsoleDashboard.tsxwith blocks infeatures/dashboard/console/(IncidentBanner, ScoreCard, ExposureCard, CounterList, ScoreTrendCard, RiskMatrixCard, PriorityList, RecentActivity); view from business role indashboardVariant.ts. Backend:GET /score/history+tenant_score_snapshots(migration 0069) + six-hourly sweep;/statslive counters; P95 inpkg/crq. Removed: persona dashboards, action-center panel (tests ported to__tests__/priorityList.test.tsx), period control, score-card tilt. Decisions recorded as D-067.Verified —
go test ./...80 packages ok ·npx tsc -b --noEmitclean ·npx vitest run1000/1000 · lint ceiling 96 · live on Postgres with the design dataset, dark and light side by side with the mockup, 414 px, axe 0 serious/critical.Criteria — 1 ✅ (period control dropped: nothing on the page is period-scoped) · 2 ✅ · 3 ✅ (exposure direction, owner decision) · 4 ✅ · 5 ✅ (KEV = kev_open, incidents = open, coverage = mean percent_complete) · 6 ✅ (binning documented in RiskMatrixCard and /stats) · 7 ✅ (activity wording is #905's; priorities empty on tenants with nothing assigned, #902)
Next — merge #925, retarget #926 to master. Then #902 action center: widen the sources so the dashboard priorities fill.
Blocked on — nothing.
Merge pull request #926 from opendefender/feat/901-dashboard