Skip to main content

Snail Mail (direct mail)

Snail Mail (direct mail)

Last updated: March 23, 2026 Status: Implemented (upload-first templates + campaign send/progress); advanced builder workflows remain planned.

Product name: Snail Mail (Fundraising hub). Channel: PCM Direct Mail API v3 (configurable; mock mode when credentials unset). Route / navigation: Path /fundraising, Zustand fundraisingTool = snail-mail. See 00-FUNDRAISING-HUB.md.

Primary component: src/features/fundraising/components/SnailMail/SnailMailHub.tsx

Data / send path: src/lib/db/directMail.ts → Supabase Edge Function send-direct-mail (MintBucks, demo guard, job rows). Optional webhook stub: pcm-webhook.

Donor Reporting handoff: Reports → Donor Reporting can open Snail Mail with mailable donors pre-selected via sessionStorage key snailMailIntent (donorIds, year). Printed tax PDFs per donor are a separate future slice (reuse send-tax-reports data).

Delivery issues: Issues tab in the hub; PCM status POSTs to pcm-webhook update direct_mail_job_recipients and raise in-app notifications (direct_mail_delivery). See PCM-DIRECT-MAIL-INTEGRATION.md § Webhooks.

Frontend styling notes

  • Breadcrumb labels are hardcoded per styling standard (Fundraising > Snail Mail), with breadcrumb rendered first on page.
  • Data-heavy views use shared shadcn Table primitives (table-fixed w-full, tiered w-[Xpx] widths, one flex column).
  • Issue/delivery statuses use semantic Badge variants (success, warning, error, info, outline) rather than custom color classes.

Related docs


Synced from IFMmvp-Frontend documentation: pages/fundraising/13-SNAIL-MAIL.md

Ready to Get Started?

See how Alignmint can simplify your nonprofit's operations. Schedule a free demo with our team and we'll walk you through everything.

Questions? Email us at steven@getalignmint.org

Ready to get started?Start Plus Trial