Top-line

The four numbers that matter. Everything else is a breakdown of these.

Total raised
Sum of amount_cents where appeal_code = 'xmas2026'
Gifts received
Count of attributed rows
Average gift
Total ÷ count
Cases funded (est.)
Total ÷ $1,840 (Y1 audited cost per case, verbatim)

Progress to the frame-lock ask

The frame-lock's line 7: "This December we are asking for the gift that funds the next thirty cases." That is our tape.

30 cases × $1,840  =  $55,200 target

Loading…

$0 $18,400 $36,800 $55,200 (30 cases)

Ask-ladder tier breakdown

The frame-lock's 3-tier ladder: $50 entry · $1,840 featured · $5,000 founder · custom. Distribution shows which ask is landing.

Tier distribution · gifts

$50 entry gifts
$1,840 case gifts (featured)
$5,000 founder-tier gifts
Custom amounts

Tier distribution · dollars

$50 tier · total
$1,840 tier · total
$5,000 tier · total
Custom · total

Source attribution

Which channel delivered the gift. Read directly from utm_source on the attribution row.

By channel · gifts count

Loading channel data…

By channel · dollar value

Loading channel data…

Frame-lock discipline · how this dashboard stays honest

What this dashboard does not do

Does not extrapolate. Numbers shown are what has actually landed in donation_attributions. No projections, no "on-track-to" estimates, no aspirational lines.

Does not manufacture the denominator. The "30 cases" ask target is the Sprint 57 locked frame-line 7, verbatim. Not a KPI made up for this dashboard.

Does not mix in past appeals. Query filter is strictly appeal_code = 'xmas2026'. Legacy donations under other codes (or null) are counted elsewhere, not here.

Does not glorify velocity. No "gifts per hour" or "biggest hour so far" metrics. This is a governance dashboard, not a hype dashboard.

Y1 audited numbers referenced by this dashboard (verbatim only): $1,840 average cost per case · 87c of every donated dollar to direct service · 31 cases resolved in Y1.

What to do when a number here surprises you

Never quote a dashboard number in an external comm without a same-day cross-check against donation_attributions raw rows.

Never bake a dashboard number into a founder LI post, an email, or a media release without Carla's sign-off (G2 gate, per Sprint 57).

The dashboard is an internal governance surface. External statements about "how the appeal is going" go through Lisa, and only Lisa.

What this dashboard does not contain (and why)

Not here · and why

Meta CAPI conversionsBlocked on backlog item #9 (Laurence Meta creds).
Google Search conversionsRequires backlog item #10 (GS pack) landing first.
Recurring-gift LTVRecurring giving opens post-DGR only. Backlog item #3.
Donor identity (names, emails)Only email HASHES stored. PII belongs in CRM, not the dashboard.
Real-time push updates60-second polling only. WebSocket infra is out-of-scope for Cloudflare Pages.

Where the rest lives

First 90 days ops plan/launch-90-days
Q4 content calendar/q4-content-calendar
Reactive playbook/launch-reactive-playbook
Frame-lock (source of truth)/christmas-appeal-frame-lock