Core insight: The primary object is the LINK, not the appeal.
Aaisha doesn't think 'manage appeals' — she thinks 'share my link'.
## Collect page (/dashboard/collect) — complete rewrite
- Flattened hierarchy: single-appeal orgs see links directly (no card to click)
- Multi-appeal orgs: quiet appeal switcher at top, links below
- Inline link creation: just type a name + press Enter (no dialog)
- Quick preset buttons: 'Table 1', 'WhatsApp Group', 'Instagram', etc.
- Share buttons are THE primary CTA on every link card (Copy, WhatsApp, Email, Share)
- Each link shows: clicks, pledges, amount raised, conversion rate
- Embedded mini-leaderboard when 3+ links have pledges
- Contextual tips when pledges < 5 ('give each volunteer their own link')
- New appeal creation is inline, auto-creates 'Main link'
## Appeal detail page (/dashboard/events/[id]) — brand redesign
- Sharp edges, gap-px grids, typography-as-hero
- Same link card component with share-first design
- Embedded leaderboard section
- Inline link creation (same as Collect)
- Clone appeal button
- Appeal details in collapsed <details> (context, not hero)
- Download all QR codes link
- Public progress page link
## Leaderboard page — brand redesign
- Total raised as hero number (dark section)
- Progress bars relative to leader
- Medal badges for top 3
- Conversion rate badges
- Auto-refresh every 10 seconds (live event mode)
## Route cleanup
- /dashboard/events re-exports /dashboard/collect (backward compat)
- Old events/page.tsx removed (was duplicate)
5 files changed, 3 pages redesigned
22 lines
582 B
PHP
22 lines
582 B
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\ApprovalQueueResource\Pages;
|
|
|
|
use App\Filament\Resources\ApprovalQueueResource;
|
|
use Filament\Resources\Pages\ListRecords;
|
|
|
|
class ListApprovalQueues extends ListRecords
|
|
{
|
|
protected static string $resource = ApprovalQueueResource::class;
|
|
|
|
public function getHeading(): string
|
|
{
|
|
return 'Fundraiser Review Queue';
|
|
}
|
|
|
|
public function getSubheading(): string
|
|
{
|
|
return 'New fundraising pages that need your approval before going live. Use "AI Review All" to process in bulk, then approve or reject.';
|
|
}
|
|
}
|