Journal · Case Study

Building ConsumerWatchdog.org, Solo

Sole CTO for a national nonprofit advocacy organization: the tech stack, the operations, and what breaks at 2am.

Being the sole technologist at a nonprofit is different from being "CTO" at a startup with six engineers. There is no ticket queue. There is a reporter on deadline, a press conference tomorrow, a litigator who needs a case document served through the site at 11pm, and a donor database that absolutely cannot lose a record. You are the queue.

ConsumerWatchdog.org has been my responsibility end-to-end. Front-end, back-end, email platform, telecom, broadcast integrations, donor CRM, archive tooling — all of it threads through one person. This is a post about what that looks like in practice.

The stack

The site runs on a Drupal core with a heavily customized theme and content architecture. Drupal is the right tool for a nonprofit with a decade of policy reports, legal filings, press releases, and video archives — structured content with taxonomies and access control, not a blog. Around it:

  • Mailchimp for newsletter distribution & list segmentation
  • NationBuilder for advocacy actions, supporter CRM, petition signups
  • FreePBX + Asterisk for the press office phone system, call routing, and voicemail-to-email
  • Amazon S3 + Lightsail for static assets, archives, and low-traffic microsites
  • Salesforce for donor and institutional relationships

Press conference day

A press conference is a distinct kind of product launch. Reporters need the release, visuals, b-roll, and a quotable expert, all at precisely the same time. The site has to push the media kit public at the moment the embargo lifts, the email blast has to land in reporter inboxes within 60 seconds of that, and the live stream has to be ready to go the moment the lectern mic opens.

I built the publishing workflow to hit all three of those in one action. It is not exciting engineering. It is boring, reliable, three-line-of-output-in-a-terminal engineering. That is exactly what a press operation needs at 9:57am before a 10am conference.

The broadcast side

Consumer Watchdog runs enough of its own video that the site has to behave like a lightweight newsroom CMS. Every press conference gets a public video archive page. Every TV hit gets its clip hosted and embedded on the topic page where it belongs. The YouTube API handles most of it, but the mapping from "this clip is about oil & gas" to "put it on every relevant case page" has to be my logic, not YouTube's.

What breaks, and when

The classic failures: a mass email flagged as spam because a new ISP rotated its reputation rules overnight. A donation form that stopped posting to the CRM because a third party pushed a silent schema change. A phone tree that started dropping calls because a carrier deprecated SIP ALG support on their network edge. None of these show up as "your site is down." All of them show up as a staff member asking why this one thing stopped working for one user in Ohio.

The job is 70% investigation, 20% repair, 10% writing actual new code. The investigation part is the part that doesn't scale to a team. You have to hold the whole system in your head to find the fault line fast.

Why solo

Nonprofits have real budget constraints. A single technologist who can do Drupal, telecom, broadcast, and email — and who cares about the mission — is worth two senior hires who specialize. It is also exhausting. But the organization moves faster because every change goes through one person who knows the whole map, and that is a trade worth making for the work Consumer Watchdog does.