Project Info
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 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
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.
VoteSmartWeb
Group members: Sathya Seelam, Avni Gandhi, Amisha Kandi, Mihir Bhagatwala
VoteSmart is an AI-powered platform that simplifies complex political information into clear, personalized insights for voters. It helps users understand propositions, compare candidates, and make confident decisions at the ballot box. This idea originated after the 2024 election when I realized that, like me, many first-time voters found it difficult to navigate the legal jargon and dense language in official voting materials. With VoteSmart, we hope to increase civic engagement and reduce barriers to political participation—especially for first-time voters and underrepresented communities.
On the tech side, VoteSmart is built using React and Vite for the frontend, FastAPI and Python for the backend, and MongoDB for the database. We integrated Google Gemini's generative AI to simplify propositions and candidate policies, and used custom web scraping tools to pull information directly from trusted sources like .gov websites and official campaign platforms.
Analysis
View
Metric
- 6
- 5
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- FastAPIIn code
- FirebaseIn code
- FlaskIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Google GeminiClaimed
- MongoDBClaimed
10 of 12 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
284 KB
Source files
113
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
sathyarseelam/VoteSmartWeb
133 files · 1.6 MB · @ 9f3762b
Structure
Interface
91 files · 68%Screens, components and styles rendered to the user.
API & routing
1 file · 1%Request entry points: routes, handlers and controllers.
Application logic
21 files · 16%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript91%
- Python7%
- CSS1%
- HTML0%
- Markdown0%
- JavaScript0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 68- @hookform/resolvers
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- @radix-ui/react-radio-group
- @radix-ui/react-scroll-area
- +50 more
backend/requirements.txt
pypi · 16- beautifulsoup4
- certifi
- dnspython
- fastapi
- Flask
- google-generativeai
- itsdangerous
- passlib
- pydantic
- pymongo[srv]
- python-dotenv
- python-multipart
- requests
- tiktoken
- uvicorn[standard]
- Werkzeug
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.