Inspiration
We've all checked our bank account at the end of the month and had no idea where half our money went. Was it the daily coffee runs? The food delivery? The three streaming services we forgot we subscribed to? Most budgeting apps make you log everything manually, which nobody actually does. We wanted to fix that with something simple: just take a photo of your receipt.
What it does
Trace lets you snap a photo of any receipt and automatically reads it using OCR. It categorizes every purchase and gives it a Necessity Score (Essential, Could Reduce, or Easily Cut) so you can instantly see what's worth spending on and what's quietly draining you. The dashboard shows a Waste Meter, your top spending categories, and even a Spending Persona (turns out we're both Coffee Addicts). The Insights page breaks down exactly where to cut and how much you'd save in a year if you did.
How we built it
- React + Vite for the frontend
- Tesseract.js for in-browser OCR, no API keys, works completely offline
- Framer Motion for all the animations
- Recharts for the spending breakdown chart
- Tailwind CSS for styling
- localStorage for data persistence, fully client-side with no backend needed
The receipt parsing logic is custom-built. We take the raw OCR text, extract prices and item names using regex, then run them through a keyword-matching categorizer that maps merchants and items to spending categories.
Challenges we ran into
Getting OCR to work in the browser was genuinely painful. Tesseract.js v7 does not play nicely with Vite's ESM bundler and we kept hitting import errors that took forever to debug. The fix ended up being loading it via CDN instead of npm, which felt hacky but worked perfectly. Receipt parsing was also tricky since real receipts are inconsistently formatted across different stores, so getting the regex to reliably extract item names and totals took a lot of trial and error.
Accomplishments that we're proud of
The Spending Persona feature is something we're really happy with. Instead of showing dry numbers, it tells you something about yourself like "You're a Coffee Addict" or "You're a Subscription Hoarder," which makes the data feel personal. We're also proud that the whole thing works with zero backend. No accounts, no servers, no API keys, you just open it and it works.
What we learned
The hardest part of building a finance tool isn't the finance part, it's making it feel human. Numbers are easy. Getting someone to actually care about those numbers is hard. That's why we focused on the language the app uses ("you wasted $700 on coffee" hits different than "Coffee: $700.00") and on making the UI feel less like a spreadsheet and more like something you'd actually want to open.
What's next for Trace
- Live camera scanning so you don't have to upload a photo separately
- Weekly summaries with a Monday morning digest of how last week went
- Category budgets where you set a limit per category and get warned when you're close
- Export so you can share your monthly report as an image
- Bank statement import for people who already threw away their receipts
Log in or sign up for Devpost to join the conversation.