Project Info
This project did not submit a demo video on Devpost.
Inspiration
๐ก During 2024, our group turned 18, during peak election season. This means that we had gained the ability to vote. However, getting thrown into a massive storm of information getting spewed out left and right gets confusing real fast. With the amount of propositions, candidates, and agendas that were getting pushed onto us, it was easy to get overwhelmed by the amount of information. So we thought, _ what if we could have an app simplify everything for us? _
What it does
๐ votEZ scrapes the web for the current running candidates for presidents, vice presidents, and governors for every state. It scrapes their agendas and using that information, simplifies it into a short passage that summarizes everything for the user with as little bias as possible. Another feature is that it scrapes the web for propositions and simplifies them into paragraphs and also gives potential outcomes to the proposition.
How we built it
๐ ๏ธ For the backend, we built a CRUD system using python Flask API and gunicorn to handle http request handling, routing, and database management. Using python concurrently, we were able to run the backend server at the same time we ran the frontend script. For scraping, we used python BeautifulSoup to scrap ballotopedia.org and built multiple .csv files (which we then converted to json) to train our AI model. Using Groq, we made multiple chatbots: a general overview, and a specific chatbot that will help the user out with what is on the current page. Additionally, Groq was used to simplify the data on screen so that it would not take as much space on mobile compared to web. Groq was also used to translate languages on screen, so we can switch Using the Expo Router and React Native, we were able to build a concurrent mobile and web application. We used supabase for authentification and user/chat history.
Challenges we ran into
๐๏ธ One of the biggest challenges we ran into was trying to host our backend server. Initially, our chatbot and scraping would only work on web because our code was based on localhost, meaning we needed a server. Initially, we had to run 3+ terminals to run the backend and the frontend for the mobile application to work (we had no idea why). Until we stumbled upon gunicorn and concurrently, which helped run both the backend and frontend server easily and also fixed our problem with mobile. Another problem that we had was with scraping. With web scraping with beautiful soup, we noticed a pattern that the scraper would always fail to fetch unless the website was already opened beforehand. Initially, we were considering to use selenium in order to open a headless browser with the sites to scrape. However, due to time, we just decided to compile all the data we can using the scrape with the time we had left and train the Groq model with that. Therefore, we had to only display data from 2022-2024 time periods as there is no current widespread election cycle data for 2026.
What's next
๐ Currently, votEZ is only built around state governors, vice presidents, and presidents for previous years. Due to lack of time, we were not able to gather more data (such as county, district, boards, etc.) Additionally adding more accessibility features such as text-to-speech and voice input would have made the chatbot a lot more interactive. Since this towards people that do not have experience or resources whether that be due to time constraints or impoverished backgrounds, we aim to guide them through this process, one step at a time.
Analysis
View
Metric
- 22
- 21
- 9
- 6
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
- FlaskIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
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
138 KB
Source files
42
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
SLCoder1/CalHacks2025
65 files ยท 1.0 MB ยท @ 49dae0c
Structure
Interface
26 files ยท 40%Screens, components and styles rendered to the user.
Application logic
12 files ยท 18%Domain rules, services and shared utilities.
Data & schema
1 file ยท 2%Schema definitions, migrations and data access.
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
- TypeScript75%
- Python10%
- Markdown10%
- JavaScript3%
- SQL3%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
votEZ/package.json
npm ยท 40- @expo/vector-icons
- @react-native-async-storage/async-storage
- @react-navigation/bottom-tabs
- @react-navigation/elements
- @react-navigation/native
- @supabase/supabase-js
- expo
- expo-asset
- expo-blur
- expo-constants
- expo-font
- expo-haptics
- expo-image
- expo-linear-gradient
- expo-linking
- expo-router
- expo-splash-screen
- expo-status-bar
- +22 more
votEZ/backend/requirements.txt
pypi ยท 6- beautifulsoup4
- flask
- flask-cors
- gunicorn
- python-dotenv
- requests
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.