Dashboard Redesign
The current dashboard dedicates ~75% of the viewport to a single action queue list. Financial visibility — renewal values, status breakdown — is absent. The office manager and CEO need at-a-glance financial health alongside staff triage.
The redesign restructures the dashboard as a card grid: KPI strip at top for quick reads, workflow-specific cards below, and a more prominent renewals chart showing status and value.
Goals
- Add renewal value as a KPI visible to office manager and CEO
- Make the renewals chart more prominent with status breakdown and clickable bars
- Separate action types into workflow-specific cards (renewals, signups, data issues)
- Make the layout flexible for future dashboard cards
- Activity feed fills available space with pagination
1 Layout — Card Grid
Three-column layout with a full-width KPI strip across the top. Each dashboard widget is a card placed into the grid. New cards can be added without changing the existing layout.
Technical notes
- CSS grid:
grid-template-columns: 1fr 1fr 320px - Chart card:
grid-column: 1 / 3 - Activity feed:
grid-column: 3; grid-row: 1 / 4 - New cards slot into the grid by adding a grid item — no layout restructuring needed
2 KPI Strip
Four metric tiles plus a quick-find search, spanning the full width above the card grid.
- Large numeral with small uppercase label — same pattern as current dashboard
- Active, Pending and Renewals counts use existing data already shown on the current dashboard
- June Value is a new capability — see Renewal Value
- Quick Find searches by organisation name or account number
Technical notes
- Active, Pending, Renewals: existing
useKpiCountshook - Quick Find: existing
useQuickFindhook —ilikeon name and account_number, limit 6 - June Value: new hook required — data source TBD (see Renewal Value)
3 Renewal Value New
A new KPI tile showing the total monetary value of the current month's renewals. This is the key new financial metric requested by the office manager and CEO.
Blocked — data source TBD
The system has no membership pricing data. This tile requires a data source for monetary values per membership. Awaiting client input on whether pricing comes from Xero integration, manual entry, or a new subscription table.
The tile is included in the design. Implementation is blocked until the pricing data source is confirmed.
4 Renewals Chart
A much larger renewals chart spanning two columns of the dashboard. The current month breaks down into status segments; every bar is clickable and shows the monetary value.
Renewals by Month
2026 · showing count and valueFeatures
- Much larger than the current sidebar chart — takes a prominent position on the dashboard
- Current month stacked by status: renewed/paid, pending/due, overdue
- Clickable bars — navigates to Members list filtered by that month
- Per-month £ value shown below each bar
- Past months in neutral grey; future months as outlined placeholders
Technical notes
- Spans
grid-column: 1 / 3— two of three grid columns - Current month stacked via CSS flex with
column-reversedirection - Bar click navigates to
/members?renewal_month=N - Renewal counts: existing
useRenewalCountshook, extended with status breakdown - Value data: new hook required — depends on pricing data source
5 Action Cards
Three separate cards, one per workflow: renewal management, signup review, and data cleanup. Each card shows top items with overflow linking to the Members list.
Renewal Actions
11 membersFeatures
- One card per workflow: renewal management, signup review, data cleanup
- Renewal Actions has three collapsible tiers: overdue, due this month, upcoming
- Whole item row is clickable — navigates to org record
- Overflow links to Members list with the relevant filter pre-applied
- Signups show sector, region and size band metadata for quick context
- Data issues identify the specific problem (missing email vs missing address)
Technical notes
- Renewal Actions: existing
useActionQueuehook — overdue, due, upcoming tiers - New Signups:
membership_status = 'new'from same hook - Data Issues: orgs missing primary email or contact address, from same hook
- Overflow links require URL-driven filters on Members page (see Navigation Pattern)
6 Activity Feed
A timeline of recent membership activity shown in plain language. This is what staff see — a friendly narrative of what's happening, separate from the technical event log.
Recent Activity
Features
- Fills available space in the right column — shows as many events as will fit
- Same event types as the current dashboard, displayed in a friendlier format
- Load more appends the next page of events below — the feed grows, button moves down
- Coloured dots by event type; connector lines between entries
Technical notes
- Existing
useRecentEventshook, current limit of 10 removed - Pagination: offset-based, fetches next page on "Load more" click
- Grid placement:
grid-column: 3; grid-row: 1 / 4— fills all rows - Not the admin
/eventspage — same event types, friendlier display
8 URL-Driven Member Filters New
The Members page needs to support opening with filters already applied from a link. Today, filters reset every time you visit the page — there's no way to link someone to a filtered view.
Links to the Members list — from the dashboard, from emails, from bookmarks — will open with the right filters already applied. For example, a colleague can share a link to "all overdue renewals" and it just works.
Technical notes
This is a prerequisite for the dashboard overflow links and chart bar clicks. Without it, those links would land on an unfiltered Members page.
- Replace local
useStatefilter state withuseSearchParams - Seed filters from URL on mount; update URL when filters change
- Param mapping:
renewal_status=due|upcoming|overdue,renewal_month=N,issue=missing_data,status=active|new - Existing filter UI unchanged — just wired to the URL
9 Clickable Items
Action items are clickable as a whole row — the entire item navigates to the member record, not just the explicit Open/Review button.
The button remains as a visible affordance, but the click target is the full item. This is a change from the current dashboard where only the button is clickable.
Change from current behaviour. Try clicking any item in the mockups above — the whole row responds, not just the button.
10 Open Questions
- Membership pricing data source — The June Value KPI requires a monetary value per membership. This data doesn't currently exist in the system. Awaiting client input on where pricing data comes from (Xero integration? Manual entry? Subscription table?).