Foundation: multi-tenant routing, auth, onboarding, dashboard, admin shell, CI, dev
seed
Online giving: donation pages, Stripe Connect, receipts, thank-you emails, admin CRUD
Depth: recurring, refunds, donor merge, donor self-service portal. All 11 smoke steps
green.
Wave 1 complete + PDF tax receipts shipped + TRIBUTE DONATIONS LIVE ON EVERY SURFACE
(v1.0.178): donation form + kernel + receipt email + PDF receipt + thank-you email +
admin gift detail + donor portal gift history all wired end-to-end; donor → form →
kernel → every downstream surface is fully closed. Donation receipt emails have an
IRS-compliant PDF attachment, tenant admins can download the same PDF on demand from
/api/gifts/{id}/receipt.pdf, and donors can self-serve the same PDF from their portal
/dashboard via a per-gift "Receipt ↓" link (donor-scoped /api/receipts/{giftId} with
three access-boundary guards: host slug + donor session +
gift-party-must-match-donor-party). Built via @react-pdf/renderer (MIT, free; no paid
vendor). Wave 1 send-side smoke GREEN on testcharity 2026-05-07 (2 recipients
delivered, inbox confirmed); Resend webhook 3-fix chain (v1.0.123 signature verify +
v1.0.125 svix-id dedup + v1.0.128 admit-into-email_events) VERIFIED end-to-end against
live traffic 2026-05-11 19:04 UTC; campaign smoke Step 9 (unsubscribe) done; donor
portal smoke ALL GREEN 2026-05-11 (§1.16 email-change-confirm bug closed; Inngest +
Resend webhook chain verified for real workflow emails). Wave 2 — marketing-only
sender subdomain — PAUSED at Stage A on 2026-05-11 (v1.0.136); hit Resend free-plan
1-domain cap. Resume triggers: paying customer signs / real campaign volume / customer
asks for engagement analytics. Campaigns-smoke Steps 8 (open-tracking) and 10
(re-send-suppressed) remain infrastructure-blocked (not broken code) until paid Resend
tier. All 6 required CI gates green. No open production bugs.
Full platform: grants, accounting, AI assistant, mobile apps, integrations marketplace