Client Project
Hereafter Ghana DMS: Donor Management & Fundraising Platform
Donor management and fundraising system for a nonprofit: one-time and recurring mobile-money giving, in-kind inventory, campaigns, sponsorships, bulk SMS/email, and a permission-gated dashboard.
Overview
The system a Ghanaian nonprofit uses to run all of its fundraising: donor records, one-time giving through Paystack, recurring mobile-money giving through Hubtel, in-kind inventory, campaigns, madrasa sponsorship, bulk messaging, statement imports, and reporting. Built end to end as an Express API with eight BullMQ workers and a Next.js dashboard, plus a public giving portal.
The Problem
Donors and donations lived across spreadsheets and disconnected tools. There was no reliable way to take recurring mobile-money giving, reconcile payments automatically, track in-kind stock, or message thousands of donors without runaway SMS costs and delivery failures. Sensitive donor and financial data also needed real access control, recoverable deletes, and tamper-resistant payment handling.
The Solution
- 32 data models and 174 REST endpoints in a strictly layered API with every service built from injected dependencies, so tests swap fakes. - Paystack and Hubtel reconciled through signature-verified webhooks and sweep jobs, with recurring mandates that are never swept once charged. - Eight BullMQ workers for SMS/email dispatch with delivery logs and suppression lists, Excel imports keyed on E.164 phone numbers, exports, reminders, and recognition. - SMS segment counting implements the GSM 03.38 table so cost checks match gateway billing; any unlisted mobile-money number blocks a send. - Runtime role-to-permission matrix that super admins edit without code changes; soft delete with restore everywhere. - Optional, feature-flagged Gemini integration that drafts message copy without ever seeing donor names or phones.
Outcome
The nonprofit runs its entire donor operation from one system. The platform helped raise over GHS 70,000 in its first months and now processes more than GHS 3,000 in donations every week. Background workers keep the API responsive under load. The codebase carries 800+ backend tests across 105 files and 369 frontend tests, and deploys from CI to EC2 with migrations, health checks, and automatic rollback.