Building for good
How a news clip, a lot of planning, and an AI "CTO" turned into Civvie.
Earlier this year, I started experimenting with Claude and vibe coding real things (I wrote about it here). As a product person, I constantly have ideas for Apps & problems I'd love to solve. I've always been an ideas person and with AI opening the door to becoming a builder, I had to almost re-learn how to think like a product person. The possibilities multiplied faster than I could sort them, and I wanted to build everything at once.
I landed on something that wasn't commercial but was still viable. No accounts, no tenants, no customer data. Just an app built on public data. It was still ambitious, and that was kind of the point.
The clip that started it
During the government shutdown, TSA agents had to keep working without getting paid. I saw a news clip of a Republican senator at an airport walking up to a TSA agent and saying how sorry he was for what they were going through. The agent said something like, "I don't blame you. I blame the Democrats."
I'm not judging that person. But it made me wonder whether they knew what was actually in the bill. The people blocking it surely knew it was hurting workers who weren't getting paid, so there had to be a reason. And I realized I didn't know the reason either, beyond what I'd heard on the news.
Why the news, and AI, weren't enough
I consume a ton of news. But a lot of outlets are seen as leaning one way or the other, so people dismiss them on sight, myself included
AI chatbots don't fix that. Ask one about a bill and it'll usually cite those same news outlets.
Also, legislation is written by lawmakers who are mostly lawyers, in lawyer language. A regular person can't be expected to read it and know what it means.
So I wanted a tool that would:
- Let people ask plain questions and get answers only from official public sources
- Translate bills neutrally, without interpreting them
- Show how your representatives are serving you on the issues you care about
Whether you're a TSA agent, a farmer, a tech worker, or a family, you should be able to see how your reps are serving your interests, your needs, and your ideals.
Months of planning before a single line of code
I spent weeks planning Civvie with Claude before we wrote any code.
The front end didn't worry me. I'm a designer, and iterating on UI with Claude was beginning to feel natural. The backend, on the other hand, was a mystery. Civvie needed a real data pipeline and a RAG system, which is how an AI can answer questions using only a specific set of documents instead of the whole internet.
So I set up roles. I was the CEO, because I set the vision and approve the budget. I was also the designer and the product manager. Claude was the CTO and the developer. It made the technical decisions without me, unless a decision affected users, cost, or priorities. Those came to me.
One night that April, I told Claude: "I want to make sure we plan really really well before we write a line of code."
Then came the moment it all felt real. Claude had laid out a build plan, and I asked it to label which parts needed me.
Almost every technical step came back tagged as [CLAUDE]. Mine came down to a few sign-ups, some API keys, and checking the results. Claude described my pre-work as "basically four sign-ups."
That's when I thought: okay, this is actually possible.
Not everyone starts with a question
The first version of Civvie was intentionally narrow. I designed it around one clear path: someone has a question, Civvie finds the relevant bills and votes, and explains what their representatives actually did.
Once I started sharing it with more people, I realized that path reflected how I approached the product, not necessarily how everyone else would. Not everyone shows up with a question already formed. Some people want to find their representatives, look around, and understand the landscape first.
So I added another way in: enter your ZIP code, see your district and who represents you, then browse their records without having to ask anything first.
Seeing the whole record
The more Civvie took in, the more I wanted a way to actually see it. Here's what's in there today:
PUBLIC RECORD / TWO CONGRESSES
33,533 bills indexed.
2,039 in the full corpus.
The index starts with every bill introduced in the 118th and 119th Congresses. A bill enters Civvie’s full, reader-facing corpus only after it receives a recorded floor vote, its official vote record is completely ingested, and its plain-language content is generated.
- 01 · INDEXED33,533Every introduced bill gets a basic record.
- 02 · FLOOR VOTE2,048These bills reached a recorded House or Senate vote.
- 03 · PUBLISHED2,039Vote record complete, explanation generated, sources connected.
Why the drop? Most introduced bills never receive a recorded floor vote. Nine newly voted bills were still waiting for complete source data or generated content when this snapshot was taken.
- EXECUTIVE ACTIONS
- 631
- CBO COST ESTIMATES
- 1,295
- JCT TAX ANALYSES
- 22
- SEARCHABLE TEXT CHUNKS
- 25,365
That's a lot of record that no single answer ever shows. So I built ways to explore it:
Exploring Congress
For people who would rather browse than start with a question, Civvie opens up the same record from the country level down to a district, an individual member, or a piece of legislation.
I started with a clip of a TSA agent and a question I couldn’t answer: what was Congress actually doing for people like her?
Months later, that question has become a real tool. Civvie is still changing, and there’s plenty I want to make better. But anyone can now use it to look past the headlines, explore the public record, and see what their representatives actually did.
That’s the shift I’m still wrapping my head around. AI didn’t make the product decisions for me or make the work effortless. It let me stay with an idea long enough to turn it into something real.