Inspiration
College students consistently overspend not because they're irresponsible, but because every budgeting app was built for someone else. Mint and YNAB are designed for adults managing mortgages. The setup friction alone kills the habit before it starts.
What it does
spent? lets students scan a receipt, have AI read it instantly, confirm the details, and see their budget update in real time. No bank linking, no accounts, no learning curve. One button, five screens, done.
How I built it
Built with React and Vite as a mobile-sized web app. Gemini AI reads receipt images and returns structured data — merchant name, amount, and category. All data is stored in localStorage, meaning no backend, no servers, and no cost to run. React Context manages global state across screens.
Challenges
Getting the data layer right — an early localStorage race condition was wiping all receipts on every page refresh. Solved by initialising state lazily directly from localStorage rather than using a useEffect to load it.
What I learned
React's core patterns — component composition, lifting state up, Context for global state, and the difference between controlled and uncontrolled inputs. Also learned how to integrate a vision AI API to extract structured data from images.
What's next
Cloud sync with Firebase, push notifications when approaching budget limit, and multi-month spending history.
Built With
- gemini-ai
- javascript
- react
- tailwind-css
- vercel
- vite
Log in or sign up for Devpost to join the conversation.