Skip to content

feat(frontend): dashboard on the redesign layout #901

Closed

Description

@alex-dembele

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

  1. Header: date and data timestamp eyebrow, "Tableau de bord" title, our period control where the role switch was.
  2. 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.
  3. Security score card: value /100, band pill, 30-day delta, one bar per real factor with its weight, footnote with the weight sum.
  4. Annualised exposure card: total, stacked bar by band with legend, residual after plan and P95, each from the financial summary.
  5. Four counters (critical risks, KEV vulnerabilities, active incidents, compliance coverage), each linking to its filtered page.
  6. 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.
  7. "À 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 run on the touched features, and npx eslint on the touched files pass.
  • Backend changes, if any, come with TestXxx_Success, TestXxx_NotFound, TestXxx_Unauthorized, filter by tenant_id, and go test ./... passes.
  • PR opened with Closes #<this issue>; parent epic epic(frontend): rebuild every console screen on the October 2026 redesign #899.

Activity

  1. added
    type:featureNew user-facing capability
    status:readyMeets the ready definition
    tier:4-uxUX: polish on top of a working engine
    and removed
    status:readyMeets the ready definition
    on Oct 8, 2026
  2. alex-dembele commented on Oct 8, 2026

    @alex-dembele
    MemberAuthor

    dashboard redesign — 2026-10-08

    Done — PR #926 on feat/901-dashboard, stacked on #925. Page features/dashboard/ConsoleDashboard.tsx with blocks in features/dashboard/console/ (IncidentBanner, ScoreCard, ExposureCard, CounterList, ScoreTrendCard, RiskMatrixCard, PriorityList, RecentActivity); view from business role in dashboardVariant.ts. Backend: GET /score/history + tenant_score_snapshots (migration 0069) + six-hourly sweep; /stats live counters; P95 in pkg/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 --noEmit clean · npx vitest run 1000/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.

  3. added a commit that references this issue on Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions