Files
calvana/pledge-now-pay-later/docs/UX_OVERHAUL_SPEC.md
Omair Saleh 170a2e7c68 Complete dashboard UI overhaul: persona journeys + brand unification
Navigation: goal-oriented, not feature-oriented
- Overview → Home
- Campaigns → Collect ('I want people to pledge')
- Pledges → Money ('Where's the money?')
- Exports → Reports ('My treasurer needs numbers')
- Old routes still work via re-exports

Terminology: human language, not SaaS jargon
- new → Waiting
- initiated → Said they paid
- paid → Received ✓
- overdue → Needs a nudge
- Campaign → Appeal
- QR Source → Pledge link
- Reconcile → Match payments
- Rail → Payment method
- Pipeline by Status → How pledges are doing
- Conversion rate → % who pledged
- CRM Export Pack → Full data download

Visual identity: brand-consistent dashboard
- Sharp edges (no rounded-lg cards)
- Gap-px grids for stats (brand signature pattern)
- Left-border accents (brand signature pattern)
- Midnight/Paper/Promise Blue 60-30-10 color rule
- Typography as hero (big bold numbers, not card-heavy)
- No emoji in UI chrome
- Brand-consistent status badges (colored bg + text, not shadcn Badge)
- Consistent header typography (text-3xl font-black tracking-tight)

Pages rewritten: layout, home, events (collect), pledges (money),
exports (reports), reconcile, settings

Reconcile: auto-detects bank CSV format via presets + AI before upload

UX spec: docs/UX_OVERHAUL_SPEC.md
2026-03-04 20:50:42 +08:00

6.7 KiB

PNPL Dashboard — Complete UX Overhaul Spec

The Core Problem

The dashboard was built feature-first: each page maps to a technical concept (Events, Pledges, Reconcile, Exports, Settings). But the user doesn't think in features — they think in goals:

  • "How do I get people to pledge?"
  • "Has anyone paid yet?"
  • "Someone said they paid but I can't find it"
  • "My treasurer needs a report"

The current UI has 3 fatal problems:

  1. Jargon everywhere — "Reconcile", "QR Sources", "Rail", "Initiated", "Pipeline by Status", "Conversion rate". A masjid volunteer doesn't speak SaaS.
  2. Two visual identities — Landing pages are bold, typographic, high-contrast (BRAND.md). Dashboard is generic shadcn/ui with rounded cards, muted colours, and card-heavy layouts. They feel like different products.
  3. Feature-oriented, not goal-oriented — The user has to learn the system's mental model instead of the system matching theirs.

Personas & Their Real Journeys

Persona 1: Charity Admin (Aaisha)

Who: Fundraising manager at a UK Islamic charity. Not technical. Uses WhatsApp all day. Her actual journey:

  1. "I need to collect pledges at our gala next Saturday" → Create campaign + links
  2. "The event is tonight, give each table a QR code" → Print QR codes
  3. "It's Monday, who pledged? Who's paid?" → Check the money
  4. "My treasurer needs numbers for the trustees meeting" → Download a report
  5. "Ahmed said he paid but we can't see it" → Find & match a payment

What confuses her today:

  • "Campaigns" (she calls them "appeals" or just "the dinner")
  • "QR Sources" → she just wants "links for my volunteers"
  • "Reconcile" → she'd say "check the bank"
  • "Initiated" status → "what does that mean?"
  • "Rail" → completely alien
  • "Pipeline by Status" → ???

Persona 2: Volunteer (Yusuf)

Who: Table captain at the gala. Has his own QR code. Checks his phone to see pledges. His actual journey:

  1. Gets a link from Aaisha → opens volunteer view
  2. Shows QR code at his table → donors scan it
  3. Checks "how am I doing?" on his phone
  4. Wants to brag → shares leaderboard

He never sees the dashboard — his entire journey is /v/[code]. But if Aaisha asks him to "help manage", he'd see the dashboard and be completely lost.

Persona 3: Treasurer (Fatima)

Who: Charity trustee responsible for financial oversight. Needs Gift Aid reports, bank reconciliation, clean data. Her actual journey:

  1. "Download last month's Gift Aid declarations" → Export
  2. "Match bank statement to pledges" → Upload CSV, see matches
  3. "Show me the money: what's collected vs outstanding" → Summary
  4. "I need this for the trustees report" → Numbers she can screenshot

What confuses her today:

  • Column mapping UI (Date Column, Description Column...) → she just wants to upload a file and it works
  • Technical status names
  • No clear "money in vs money out" view

Persona Overlap

Aaisha does 80% of the work. She IS the charity admin, the event organiser, AND does the bank checking. Fatima only logs in once a month. Yusuf never logs in.

This means: optimise everything for Aaisha. Make Fatima's tasks findable but not in the way. Yusuf is a non-factor for dashboard design.


The Redesign: Goal-Oriented Navigation

Before (feature-oriented)

Overview | Campaigns | Pledges | Reconcile | Exports | Settings

After (goal-oriented)

Home | Collect | Money | Reports | Settings
Old New Why
Overview Home Everyone understands "Home"
Campaigns Collect "I want to collect pledges" — the verb, not the noun
Pledges Money "Where's the money?" — that's what they're checking
Reconcile (merged into Money) "Check the bank" is part of "where's the money"
Exports Reports Charities think in "reports", not "exports"
Settings Settings Fine as-is, but with friendlier sub-labels

Terminology Overhaul

Old (SaaS jargon) New (human language) Where used
Campaign Appeal / Collection Nav, headers
QR Source Pledge link Cards, dialogs
Reconcile Match payments Nav, page title
Rail Payment method Tables, detail
Initiated Said they've paid Status badge
Pipeline by Status How pledges are doing Dashboard card
Conversion rate % who pledged Stats
CRM Export Pack Full data download Export card
Webhook / API Connect to other tools Export card
GoCardless Direct Debit Settings
Reference prefix Code prefix Settings
Auto-confirmed Automatically matched Reconcile

Status Labels (the biggest confusion)

Old New Color What it actually means
new Waiting Gray Pledge made, no payment yet
initiated Said they paid Amber Donor clicked "I've paid" or replied PAID
paid Received Green Payment confirmed in bank
overdue Needs a nudge Red No payment after reminder cycle
cancelled Cancelled Gray muted Donor or staff cancelled

Visual Identity: Bringing Brand into the Dashboard

Current Dashboard Style

  • Generic shadcn/ui (rounded-lg cards, muted-foreground, hover:shadow-md)
  • No brand colors except occasional trust-blue
  • Card-heavy layout (everything in a Card with CardHeader/CardContent)
  • Small text, low contrast
  • Emoji as visual anchors (🤲, 💷, 🏦)

Target Dashboard Style (matching BRAND.md)

  • Sharp edges — remove rounded-lg on cards, use squared or rounded-sm max
  • Typography as hero — big bold numbers, not cards with icons
  • Gap-px grids instead of card grids for stats
  • Dark sections for key actions (1-2 per page)
  • Left-border accents on feature items
  • No emoji in UI — use the brand icon system
  • 60-30-10 color rule — Midnight + Paper base, Promise Blue actions, Gold/Green/Red status only
  • Signature numbered steps (01, 02, 03) in setup flow

Implementation Plan

Phase 1: Navigation + Terminology (layout.tsx)

  • Rename nav items
  • Update sidebar visual to match brand
  • Remove emoji from sidebar help box

Phase 2: Dashboard Home (page.tsx)

  • Rewrite with brand typography
  • Gap-px stat grid instead of card grid
  • Human status labels
  • Remove jargon

Phase 3: Collect page (events → collect)

  • Rename to "Collect"
  • Simplify campaign creation
  • Better empty state

Phase 4: Money page (pledges + reconcile merged)

  • Two tabs: "People" (pledge list) and "Bank" (reconcile)
  • Human column labels
  • Human status badges

Phase 5: Reports page (exports)

  • Cleaner cards
  • Brand style

Phase 6: Settings page

  • Friendlier labels
  • Remove technical jargon