Case Study · Nonprofit Communications Platform

I AM YDC.

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.

Contact CRM Email & SMS Broadcast Drip Sequences Sign-Up Forms Lead Capture Delivery Analytics
10Dashboard Modules
800Contacts Under Management
2Delivery Channels
4Delivery Providers With Failover

The Architecture

One dashboard, two audiences.

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.

Part 01

The Staff Dashboard

Ten modules behind an admin login, covering the whole lifecycle from first contact to delivery report.

  • Overview: weekly snapshot of contacts, subscribers, open rate, and SMS delivered
  • Contacts, Lists, and tag-based segments with an engagement timeline per person
  • Broadcast for one-off email and SMS sends, with scheduling
  • Sequences for automated drip campaigns triggered by a tag or a form submission
  • Metrics and Reporting for delivery and open analytics
  • Settings for sender identity, notification preferences, and team members
Part 02

The Capture Surfaces

Everything the public touches, generated from inside the dashboard so staff never wait on a developer.

  • Sign-up forms with a shareable public link per form
  • Submissions land as contacts automatically, tagged by source
  • Per-form visit, submission, and conversion tracking
  • An embeddable lead-capture popup with photo, consent checkbox, and position options
  • Hosted opt-in confirmation and unsubscribe pages

The Contact Record

Every contact, with the history attached.

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.

Contacts (staff only)
Marcus T. · Book-a-tourNew Sign-Up
Renee W. · VolunteerIn Sequence
Andre P. · Business-mixerSubscribed
Yolanda G. · DonorSubscribed

The Automation

Set it once, then leave it.

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.

01

Someone signs up

A sign-up form on the website, a shared link, or the embedded popup captures the contact and the source it came from.

02

They land tagged

The submission becomes a contact automatically, tagged by which form it came through, so the segment it belongs to is already decided.

03

A sequence enrolls them

That tag triggers a drip sequence. The first message goes out without staff touching anything.

04

Follow-up runs itself

The rest of the sequence sends on its own schedule across email and text, and every open and delivery reports back to one dashboard.

Dashboard (staff only)

This week at a glance

Contacts

Every record, filterable, with an engagement timeline

Lists

Segments that build themselves from tags

Broadcast

One-off email and SMS, scheduled or sent now

Sequences

Drip campaigns triggered by tag or form

Forms

Shareable sign-up links with conversion tracking

Metrics

Delivery and open rates across both channels

The Staff View

Ten modules, one login.

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

Built to keep sending when a provider goes down.

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.

Role-Based Access

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.

Hardened Endpoints

Webhook tokens are compared in constant time, and every user-supplied string is escaped before it reaches the page.

Locked-Down Headers

Content Security Policy, clickjacking protection, and MIME-sniffing protection are set at the edge on every response.

Continuous Deployment

GitHub Actions ships the dashboard and its functions together, so a fix reaches staff without a manual release.

The Stack

Owned, not rented.

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.

Firebase Hosting Firebase Auth Firestore Cloud Functions Firebase Storage Amazon SES SendGrid Resend Twilio

Your list should belong to you.

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