Ballot Commons: Vibecoding to Combat Midterm Angst
In most of the posts I read these days on LinkedIn, I find that PMs, Designers and engineers are all jumping down the vibecoding bandwagon to really get their feet wet with Claude Code and understand exactly how much an individual can achieve on their one with AI-enabled coding tools.
Well I am another one of those who has jumped on the bandwagon. I recently built ballotcommons.org to upskill myself on vibecoding, but also provide me with a personal outlet to combat my psychological angst during this uncertain season before the US midterm elections. In recent days, I have pondered as to exactly how the AI era will bring forth a period of “abundance,” despite conflicting incentive structures that weigh much more heavily towards negative potential outcomes than positive ones. In my meditations on this topic, I came to realize that as building becomes so cheap, those with ambitions for good can quite frankly “build the change they’d like to see” in the world. So I took a stab at doing that myself.
I think the world suffers from a cluttered, chaotic, and biased media landscape that has caused echo chambers in our society that are quite directly undermining the future of democracy. So what if we used AI tools to thoughtfully explain the democratic process and what it means for you in a local context? What if it did this in a way that only pulled from objective, peer-reviewed sources? What if it had a UX that was simple, easy and made sense? What if it didn’t track your user data, just to serve you ads after you leave the site to reinforce your echo chamber?
That’s how I dreamed up Ballot Commons. I approached the product problem with major ambitions, but as I began building, I learned a few things along the way that I think may be helpful to know if you are also considering vibecoding something from nothing.
Your data sources are truly your base ingredients.
If you’re building any kind of tool that synthesizes information, you need to ensure right off the bat that you’re pulling from the kind of sources that align to your end goal. My end goal was to give users an experience that expressed truly the facts, without bias, but that found the balance between providing too little information and drowning them with too many irrelevant details.
So that meant I needed to do my own research first to find examples of sources that fit that criteria. Then I told Claude to identify additional resources that fit this mold, but to send them to me for review first. Then after many reviews, we found the right batch of sources that I was confident in using. Claude then ONLY pulled from this list of pre-approved sources when we approached our page generation phase.Define what’s important for your synthesis framework.
I was trying to create a tool that tread a very fine line between too little information and too much, and without added color that presented a potential bias. This meant that I very closely needed to define examples of what a good candidate review or proposition review looked like.
But I also acknowledged that I could very easily seed my own bias into those templates. So I started out with a few templates that I wrote myself, but then I asked Claude to grade them and highlight where potential bias existed. We worked together to build a template that felt like it was finally hitting the right balance. Then we started generating candidate profiles based on this template, and I spent days reviewing and providing evaluations to sharpen the output. It’s easy to get lazy and let AI just generate everything for you, but if you don’t keep a close eye, the slop will undoubtedly seep through. So remember that training is everything.The scientific method still has its merits - don’t forget to peer review.
I knew the stakes of what I was building were high. Providing false or biased information about potential candidates can influence actual voting decisions, and my goal was to support voters in making their OWN decisions, supporting the spirit of democracy, not in trying to force an agenda subversively on people through this tool. Therefore, I knew I couldn’t trust myself as the only evaluator.
So for the issues quiz, which was a pretty high-risk feature where bias would really matter, I got feedback from friends who sit across the political spectrum to let me know whether or not the questions were phrased in a fair way. I built a Google form to drill into the survey, and told friends not to share their names, but just enter the name of a TV character. This allowed me to de-duplicate responses, and also keep everyone’s submissions anonymous. This helped me validate the peer review signal I received and ensure I was building effectively in a way that managed the risk for bias.Think carefully about where you want to maintain control vs. cede it.
I decided to only focus on one state for this prototype because I quickly discovered that the scope of this project was much larger than I anticipated. To truly remain “in the loop” meant that I needed to be able to thoughtfully review these pages and ensure that the output was hitting the bar. I chose to prioritize quality over quantity of races, and that meant I had to cut back. This made me realize that this is a point of tension that will absolutely continue in AI-assisted development moving forward. If you want to be able to truly maintain confidence in your product quality, then you need to budget for thoughtful human review and evals across your development process. That still costs time, and it requires real humans.
While I built the whole site and tool in under a week, and I was amazed by how quickly this was achieved, I was still surprised by how critical my decision making was across the entire process.
From the moodboards I developed to generate the design system, to the evaluation templates I wrote to train the synthesis engine, it still required a skilled PM that understood not only web development and UX, but that also understood a) how elections work, b) what issues were important in Texas vs. other states, c) what media bias looks like, and d) how to effectively translate pages into Tejano español. This may be the first time since graduating from college that my degree in Comparative Literature was actually put to good use.
At the end of the day, it required a lot more than just “tastemaking” and prompt engineering to make this site work. I still had to break down the problem, identify a core user journey, generate training materials and do the training myself. That required very careful decision-making across the entire process that took real time and attention.
In this new AI-assisted future, if we truly want to make sure we’re building quality and resisting slop-development, we need to keep ourselves in the decision loop and inject real “human” thinking about where value lies. Only then will we build products that truly offer utility to users and facilitate a growth of abundance at scale across the world.