Civic Engage: Contact your representative

Civic Engage

Turning complex legislation into civic action through AI-powered simplification

Most Americans cannot read the legislation that governs them. CivicEngage is my free, non-profit web app that translates federal and state bills into plain language and connects people directly to their representatives. I designed it, built every layer of the stack, shipped it, and have kept rebuilding the parts that were not good enough.

174

Active users in 5 mo

1,200+

Tracked interactions

46

Users arriving through organic Google search

Role:

Founder, full-stack product designer and developerAI integration to translate legislative complexity into accessible summaries

Scope:

  • End to end

  • Research, design

  • Architecture

  • Build

  • Deployment

  • Measurement

Tech Stack:

  • React, Node.js, Express

  • AI/NLP: Google's Gemini API

  • Database: Supabase

  • APIs: Google Civic Information API, Congress.gov API, Legiscan API

  • Deployment: Render

Live Site: civicengage.me

THE PROBLEM

When Democracy Feels Out of Reach

I kept seeing people say they wanted to be more civically engaged but didn't know where to start, and I felt it myself. Congressional approval ratings consistently hover below 20%, yet the problem isn't that people don't care about legislation. It's that participating feels impossible.

The barriers are concrete.

  • Bills average 50+ pages of dense legal terminology

  • No easy way to understand what legislation actually does

  • Finding your representative requires navigating multiple websites

  • Writing effective advocacy messages takes time most people don't have

The frustrating part is that participation actually works. Organized constituent outreach increases legislator support by 12 to 20 percent, and congressional staffers report that fewer than 50 personalized messages can influence an office's position. The system listens. People just can't get to it.

The opportunity was clear: Remove the barriers between citizens and their representatives.

RESEARCH AND DISCOVERY

Understanding the Gap

Rather than building on assumptions, I grounded the project in civic engagement research and public data. Gallup polling shows persistent congressional disapproval, which signals disconnect rather than indifference. Academic studies demonstrate that constituent communication works at both state and federal levels, and congressional staff surveys reveal that personalized messages carry far more weight than form letters.

The competitive landscape confirmed the gap. Congress.gov and GovTrack are comprehensive legislative databases, but they present bills in full legal text and assume users can parse it. That assumption is precisely the barrier preventing engagement. Nothing in the space did the translation work.

Four design principles came out of this research, and every later decision had to pass them:

  • Simplicity over comprehensiveness: show what matters most

  • Privacy by default: no accounts, no data storage

  • Progressive engagement: guide from awareness to action

  • Accessibility: make participation possible for everyone

Privacy by default was the expensive one. A stateless, no-account design meant giving up the easiest ways to measure my own product, and I chose it anyway because every step between arriving and acting is a reason to leave.

DESIGN SOLUTION

Three Steps from Awareness to Action

I designed CivicEngage around a single question: what does someone need to go from "I care about this" to "I've contacted my representative"?

Understand the Bill

AI-powered summaries present each bill in a consistent, plain-language format: what it does, why it matters, who it affects, and where it stands in the legislative process. The goal is to replace 50 pages of legal text with 5 minutes of clear information.

AI-powered summaries present each bill in a consistent, plain-language format: what it does, why it matters, who it affects, and where it stands in the legislative process. The goal is to replace 50 pages of legal text with 5 minutes of clear information.

Find Your Representatives

A single address search returns accurate representative information with direct contact details, no hunting across government websites. Address entry uses Mapbox autocomplete, and getting it right took a dead end. I tried Mapbox's prebuilt React component first, then abandoned it for a direct API integration when it proved incompatible with controlled inputs and the drawer layout.

A single address search returns accurate representative information with direct contact details, no hunting across government websites. Address entry uses Mapbox autocomplete, and getting it right took a dead end. I tried Mapbox's prebuilt React component first, then abandoned it for a direct API integration when it proved incompatible with controlled inputs and the drawer layout.

Take Action

Pre-templated messages make advocacy easy: copy-paste email templates, customizable for personal voice, with guidance on effective communication. Intent becomes action in under 2 minutes.

Pre-templated messages make advocacy easy: copy-paste email templates, customizable for personal voice, with guidance on effective communication. Intent becomes action in under 2 minutes.

Designing for Trust

The original UI was functional but visually generic, and a tool about legislation has to feel serious and trustworthy. In v2.1 I built a full design system around an editorial civic-journalism aesthetic, closer to Politico Pro and C-SPAN than to a SaaS dashboard: a navy and cream palette, dark editorial heroes, and hierarchy through type scale rather than decoration.

The redesign also fixed interaction problems. Blocking modals for representative lookup and contact became side drawers, so users keep the bill they care about in view while they act on it.

Technical Architecture for Privacy and Scale

This is a fully custom build across the entire stack, not a scaffold or a no-code tool. React frontend with a custom router, Node and Express orchestrating four external APIs, Supabase for bill storage, Gemini for summarization, deployed on Render.

Making AI Summaries Trustworthy
Making AI Summaries Trustworthy

The hardest problem wasn't architecture. It was trust, because an AI tool that misstates what a bill does is worse than no tool at all. I engineered structured prompts that force every summary into the same neutral format, with named sections, no editorializing, and consistent reading level, and verified outputs against the source bill text.

Reliability also meant designing for failure. Fallback handling degrades to official bill data when the API misbehaves, so the app never shows something wrong in place of something true.

Even model selection was a lesson in operational AI. I cycled through three Gemini models that failed on quota limits or deprecated endpoints before landing on a flash-lite model with a genuine free tier, the kind of detail that never appears in a demo but decides whether an AI product stays up.

Architecture That Earned a Migration

Architecture That Earned a Migration

I launched on Heroku with DynamoDB, and real usage exposed both choices. Bill data is fundamentally relational, and DynamoDB's composite keys were creating duplicate records every time a bill updated.

In v2.0 I migrated to Render and Supabase. PostgreSQL fit the data model, Render's native cron containers replaced scheduled jobs running inside the web process, and each cron script now acquires a database lock to prevent overlapping runs.

Scope grew deliberately. Federal bills shipped first, then state legislation through the LegiScan API, which required more refactoring than it should have because I hadn't designed for it upfront.

Privacy-First Architecture
Privacy-First Architecture

Zero personal data stored, no authentication required, fully stateless. Nothing about the user is persisted, which is both an ethical stance and a UX decision.

Solving Real Challenges

Making AI Summaries Reliable
Making AI Summaries Reliable

The Challenge: Early AI summaries varied in quality—sometimes missing key information or using inconsistent formatting.

The Solution: Developed structured prompts with explicit instructions for format, tone, and required sections. Iterated on prompt engineering until outputs were consistently clear and user-friendly.

Managing API Rate Limits
Managing API Rate Limits

The Challenge: Congressional API rate limits could impact user experience during high-traffic periods.

The Solution: Implemented intelligent caching in DynamoDB to store processed bills, minimizing API calls while maintaining information freshness through scheduled updates.

Maintaining Accurate Representative Data
Maintaining Accurate Representative Data

The Challenge: Representative information changes with elections and redistricting.

The Solution: Leveraged Google's Civic Information API rather than maintaining a custom database.

RETROSPECTIVE

Key Learnings

Effective civic technology isn't about complexity—it's about removing barriers. By focusing relentlessly on simplicity and user privacy, Civic Engage makes civic participation accessible to people who previously felt excluded from the legislative process.

What I'd Do Differently

  • User Testing Earlier: While the research validated the problem, testing prototypes with actual users would have surfaced usability improvements sooner.

  • Analytics from Day One: Anonymous usage tracking would help validate which features drive the most engagement.

  • Modular Architecture: Building with state-level expansion in mind from the start would reduce future refactoring needs.

Reflection

Building Civic Engage end-to-end deepened my appreciation for the intersection of design and engineering. Every design decision had technical implications, and every technical constraint shaped the user experience.

This holistic perspective strengthens my ability to collaborate with engineering teams and design solutions that are both user-centered and technically feasible—exactly the approach that drove success in my work at ProductPlan and Bright Horizons.

Visit the Platform

Live Site: civicengage.me

Support the Project: Donation link available in footer (excess funds donated to ACLU)

Built with: React, Node.js, Express, DynamoDB, Google Gemini API, deployed on Heroku

Featured Case Studies

Featured Case Studies

Bridging the Gap in Strategic Planning with ProductPlan

Driving strategic alignment with 54% month to month retention boost with portfolio visualizations

Curriculum Management for School and District Admins

Increasing Daily Active Usage by 15% through optimization of curriculum management

Streamlining Product Development to Reduce Workflow Fragmentation

Achieving a 27% Increase in User Engagement through Streamlined Product Development

Let's build something worth reading about.

Thank you for your interest in my work. Let’s connect!