Inspiration

VoteSmart started after the 2024 elections, when many people around us were first-time voters, including us. As we went through the process, we noticed how hard it was to understand what we were actually voting on. The language in propositions was confusing, and it wasn’t always clear where candidates stood on the issues we cared about. That experience made us realize there was a real need for a tool that could make this information more approachable. So we built VoteSmart: a platform that breaks down complex political content into clear, unbiased, and personalized insights to help voters make confident and informed decisions.

What it does

VoteSmart simplifies the voting process by breaking down complex propositions and candidate policies into clear, unbiased summaries tailored to each voter. We used Google Gemini's API to translate legal and political language into easy-to-understand insights. To ensure accuracy, we built a custom web-scraping pipeline, using Beautiful Soup that pulls information directly from primary sources like .gov websites and official presidential campaign platforms. Users select their policy interests during onboarding, which allows us to personalize their feed with propositions and policies that specifically affect them, whether positively or negatively, so they can focus on the issues that matter most and make informed decisions at the ballot box.

How we built it

On Day 1, we started by nailing down what our app needed to do—after creating a comprehensive list of features we wanted, we settled on React for the front end, Python (FastAPI) for the back end, and MongoDB for storage. Two of us took on the React project: set up components, React Router, and a basic style guide. The other two started the FastAPI app: created a virtualenv, installed FastAPI and PyMongo, and made our first routes (/auth/login, /auth/signup) alongside a draft of our MongoDB collections (users, sessions). By Day 2, we focused more on the backend. We defined our user information in MongoDB (email, hashed password, timestamps), wrote helper functions to connect and query the database, and built out session management. Meanwhile, on the front end, we wired the login and signup forms to those FastAPI endpoints, and created a scraper using Gemini to gather data and articles. As all of the parts finished, we further integrated the site and submitted our code.

Challenges we ran into

The night before the deadline, we spent two hours wrestling with Git: merge conflicts, accidental commits, and a wildly tangled branch structure. We ultimately scrapped the repo, reinitialized it, and overhauled our GitHub workflow with branch protections, PR templates, and strict feature branches. We’d picked React for the UI and FastAPI (with Python) for the backend, but integrating them proved more challenging than we’d anticipated. By midnight on Sunday, we were still wiring up core frontend and backend features, with no time left to finish personalization logic for our web‑scraped data or the candidate‑suggestion engine, despite having all the Gemini API prompts and scrapers ready. In the end, we’re proud of each component we built in isolation, but we learned that in a 48‑hour sprint, ambition must be balanced with the time and expertise available.

Accomplishments that we're proud of

We're proud that our login system actually works, users can securely sign up and log in with hashed passwords and real-time form checks. We built modular Python scrapers that pull data from reliable sources like .gov sites, and they’re easy to expand later. Even with just two days, we created a clean, responsive UI that looks good on both phones and desktops. Plus, we learned how to use the Gemini API and write better AI prompts along the way!

What we learned

We learned how to connect programs from React to FastAPI to MongoDB, showing a clear front-to-back progression, and helped us understand how APIs can communicate. After the Git mistake that made our git commits more complicated, making this site has taught us more about better using Git and how branches should work. Wrapping the Gemini API and GPT helper also educated us on tokens and rate limits, preparing us more for work for AI. We’ve also learned more about using MongoDB and how to send data between FastAPI and a database. Overall, this experience educated us a lot on popular topics in the world and prepared us to work on similar projects in the future.

What's next for VoteSmart

We will continue to build VoteSmart by adding features like a personalized chatbot that can answer user-specific questions about voting and policy issues. We also plan to develop a real-time polling feature that shows how users are leaning on candidates and propositions, helping voters stay informed and engaged throughout the election cycle.

Built With

Share this project:

Updates