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

Share this project:

Updates