Campaigns, movements & advocacy
A public accountability roster with the districts drawn in.
A statewide pledge site: a filterable candidate roster, interactive district maps, and CRM-backed pledge intake.
An accountability campaign needed to show, publicly and clearly, which candidates had taken a specific pledge. It wanted constituents to find their own district, see who was on their ballot, and add their name, without living on a slow WordPress site.
We built the accountability platform off WordPress on a modern stack: a filterable public candidate roster, interactive US and district maps (D3-geo with TopoJSON) so a visitor can find their own district and see who’s on their ballot, and a sign/pledge form proxied server-side into the CRM’s intake endpoint. Incremental static regeneration keeps the roster fast and current, Turnstile guards the forms, and the whole thing deploys via Docker/Coolify.
- Turns an accountability message into an interactive tool: constituents find their district, see their candidates, and act, all in one place.
- The roster is public, filterable, and fast (incremental static regeneration), accountability you can actually browse, not a PDF.
- Pledge signatures flow straight into the CRM with source attribution. The campaign captures the relationship, not just a signature.
- District mapping makes it personal: “here’s who represents you” beats “here’s a list.”
public candidate roster
find your district + who’s on your ballot
pledge intake with attribution
always-current public roster
Client name and identifying details withheld by design. Every figure here is drawn from the system we actually delivered.
More case studies
All workMembership & advocacy · Organization-wide platform
One operating platform for a 600,000-supporter organization.
ReadData architecture · Coordinated back-office systems
Four department systems that finally agree on who someone is.
ReadCommunications · Deliverability engineering
A self-hosted email operating system, built to survive Gmail.
ReadYour work would get the same discretion.
Tell us what's breaking. We'll tell you whether we've solved something like it. And if we take it on, your name stays yours.
Start with a diagnostic