Case Study · Nonprofit Communications Platform
A youth development center was running its outreach out of a rented email tool, with its contact history locked inside someone else's platform. This is the system that brought it home: one dashboard that holds every contact, sends email and text, runs automated follow-up, captures sign-ups from the website, and reports on what actually landed.
The Architecture
Staff work inside an authenticated dashboard. The public never sees it. What the public does see are the capture surfaces the dashboard generates: shareable sign-up forms and an embeddable widget that drop straight into the contact list.
Ten modules behind an admin login, covering the whole lifecycle from first contact to delivery report.
Everything the public touches, generated from inside the dashboard so staff never wait on a developer.
The Contact Record
Contacts carry tags, list membership, and a full engagement timeline, so staff can see what someone was sent and whether they opened it before reaching out again. Segments build themselves from tags rather than being maintained by hand, which means a list stays current without anyone rebuilding it.
The existing contact history was imported rather than abandoned, so the organization kept years of relationships instead of restarting at zero.
The Automation
Broadcast handles the one-off: a newsletter, an event announcement, a weather closure by text. Sequences handle everything after that, on their own schedule, with no one remembering to press send.
A sign-up form on the website, a shared link, or the embedded popup captures the contact and the source it came from.
The submission becomes a contact automatically, tagged by which form it came through, so the segment it belongs to is already decided.
That tag triggers a drip sequence. The first message goes out without staff touching anything.
The rest of the sequence sends on its own schedule across email and text, and every open and delivery reports back to one dashboard.
This week at a glance
Every record, filterable, with an engagement timeline
Segments that build themselves from tags
One-off email and SMS, scheduled or sent now
Drip campaigns triggered by tag or form
Shareable sign-up links with conversion tracking
Delivery and open rates across both channels
The Staff View
Staff open one dashboard and see the whole operation: who is in the list, what went out, what landed, and what is scheduled next. No switching between a mail tool, a texting tool, and a spreadsheet to answer a single question.
Settings covers sender identity, notification preferences, and team members, so adding a staff member does not require a developer.
Under the Hood
Email delivery runs through Amazon SES, with SendGrid and Resend configured as fallbacks. Text messaging runs through Twilio. If the primary provider fails, the send does not.
Firebase Auth issues admin and member claims. The rules live in Firestore and Storage, not in the interface, so access holds even if someone reaches the data directly.
Webhook tokens are compared in constant time, and every user-supplied string is escaped before it reaches the page.
Content Security Policy, clickjacking protection, and MIME-sniffing protection are set at the edge on every response.
GitHub Actions ships the dashboard and its functions together, so a fix reaches staff without a manual release.
The Stack
Firebase Hosting, Firestore, Firebase Auth, Cloud Functions, and Firebase Storage, with Amazon SES, SendGrid, Resend, and Twilio handling delivery. The organization owns the application and the data inside it. Costs scale with what they actually send instead of with how many contacts they happen to have.
If your contacts, your history, and your sending all live inside a tool you rent by the seat, that is a system worth owning. Let's build yours.
Book a Discovery Call