Skip to content

feat(dashboards): richer, coherent redesign of all four role dashboards (grounded in real data)#143

Merged
ma7moudalysalem merged 1 commit into
mainfrom
feat/dashboard-redesign
Jul 7, 2026
Merged

feat(dashboards): richer, coherent redesign of all four role dashboards (grounded in real data)#143
ma7moudalysalem merged 1 commit into
mainfrom
feat/dashboard-redesign

Conversation

@ma7moudalysalem

Copy link
Copy Markdown
Owner

Elevates the visual design of all four role dashboards while keeping every figure backed by data the API actually returns — no fabricated metrics, no new API calls, no fake deltas (this repo just removed several; none reintroduced).

Shared primitives

  • DonutChart — proportional ring + legend + center total, themed via design tokens (light/dark), with an empty state. A richer read than flat bars for status/composition.
  • StatusPill — small tinted chip encoding state in colour + text.

Per dashboard

Role Change
Student Status → donut; redundant 9-tile nav grid (dupes the sidebar) replaced by a real "My applications" list (avatar, provider, relative time, status pill).
Provider Status → donut from the server status-counts aggregate (all apps); new "recent applications" list (student · scholarship · time · pill).
Consultant Bookings → donut (keeps merged no-show bucket); new "upcoming sessions" list from real confirmed+future bookings.
Admin Application funnel → donut; user-growth chart + 7/30/90 toggle + {{days}} subtitle, real Users delta, and audit feed all preserved.

A STATUS_META map per dashboard keeps donut colours and pill tones in sync.

Verification

  • Rendered live against seeded local data for all four roles (student donut+list, provider, consultant donut "15 bookings"+upcoming session, admin funnel donut + growth chart + audit feed).
  • tsc -b clean; eslint --max-warnings 0 clean on all five changed files.
  • Only 5 files touched (1 primitive + 4 dashboards); no locale/server changes.

…ds (grounded in real data)

Elevate the visual design of every role dashboard while keeping every number
backed by data the API actually returns — no fabricated metrics, no new calls.

Shared primitives (components/dashboard/primitives.tsx):
- DonutChart: a proportional ring + legend + center total, themed via design
  tokens (light/dark), with an empty state. A richer read than flat bars for a
  status/composition breakdown.
- StatusPill: a small tinted chip that encodes state in colour as well as text.

Student:
- Applications-by-status is now a DonutChart (center = total applications).
- The redundant 9-tile nav grid (a duplicate of the sidebar) is replaced by a
  real "My applications" list: the most-recently-updated active applications
  with an avatar, provider + relative time, and a StatusPill. A STATUS_META map
  keeps donut colours and pill tones in sync.

Provider:
- Applications-by-status → DonutChart fed from the server status-counts
  aggregate (all applications, not one page).
- New "recent applications" list (student, scholarship, submitted-time, status
  pill) replacing the nav-tile grid; 8/4 grid for coherence.

Consultant:
- Bookings-by-status → DonutChart (keeps the merged no-show bucket).
- New "upcoming sessions" list from the real confirmed+future bookings.

Admin:
- Application funnel → DonutChart (real funnel counts). User-growth area chart
  with its 7/30/90 toggle + {{days}} subtitle, the real Users delta, and the
  audit-log feed are all preserved.

All four verified rendering with live seeded data (student/provider/consultant/
admin); tsc + eslint (--max-warnings 0) clean.
Copilot AI review requested due to automatic review settings July 7, 2026 20:37
@ma7moudalysalem ma7moudalysalem merged commit 2d065f6 into main Jul 7, 2026
1 check passed
@ma7moudalysalem ma7moudalysalem deleted the feat/dashboard-redesign branch July 7, 2026 20:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants