Inspiration
Every time you swipe your card, you pay three costs: what it costs now, what it costs your future self, and what it costs the planet. Banking apps only show the first one. We wanted to make the other two impossible to ignore, at the moment you can still change the choice.
What it does
Catch shows the real cost of every purchase.
- Scan a receipt: Snap a photo and Gemini reads it line by line. You review and fix any mistakes before saving.
- Three costs per item: dollars now, what that money could be worth in 30 years, and an estimated carbon footprint.
- Find a better option: Using SerpApi, Catch compares your item against cheaper or greener alternatives and shows savings in dollars and carbon.
- Shopping list: Add items, get “cheaper elsewhere” badges, and hit Done to run the comparison.
- Predict and Rewind: Change a price, skip a purchase, or remove a past one and watch your 30-year timeline change on the same chart.
- Group mode: Roommates can share a list and split a receipt.
How we built it
- Frontend: TypeScript with Expo (React Native), using Expo Router for navigation, Reanimated for animations, and react-native-svg for charts.
- Backend: FastAPI. The camera sends a receipt photo to an endpoint that calls Gemini with structured JSON output to extract the merchant, items, prices, and categories.
- Data and auth: Supabase for login and storage, with row-level security so users only see their own receipts. Capital One’s Nessie API supplies synthetic banking data.
- Search: SerpApi powers the real-time price and store comparisons. We are using the Shopping API from the SerpApi library.
- Math: A single shared helper computes 30-year future value with a different growth rate per category (higher for scarce items like fuel, lower for things that get cheaper like electronics). A second helper estimates carbon from category emission factors and is always labeled as an estimate.
Challenges we ran into
- Scope: Receipt scanning, comparison, simulation, and groups is a lot for one weekend, so we locked an MVP early and cut the rest.
- Platform switch: We started as a web app and moved to Expo, then had to untangle mismatched Expo SDK package versions.
- Design: Our first UI looked generic, so we redid it with a lighter, more editorial style.
- Consistent numbers: Totals had to agree across Home, Dashboard, Receipt Detail, and Predict, so everything derives from line items through shared helpers.
- Messy receipts: Getting reliable structured data from crumpled, abbreviated receipts took prompt iteration and a review step.
Accomplishments that we're proud of
- The Rewind demo: remove a purchase and watch your future change.
- A full flow from photo to review to saved receipt to cheaper alternative, on a real phone.
- A consistent calculation layer, so every number in the app agrees.
- A polished, animated UI that feels like a real product rather than a hackathon prototype.
What we learned
- Showing a consequence beats explaining it. The replay did more than any chart of numbers.
- Structured output from an LLM, plus a human review step, makes receipt parsing trustworthy enough to use.
- Locking scope early and sharing one source of truth for the math saved us from late-night bugs.
- Estimates need honest labeling. Carbon and future-value figures are illustrative, and we say so in the app.
What's next for Catch
- Real bank linking, so purchases flow in automatically.
- Location-based nudges when you’re near a store on your shared list.
- More accurate carbon data, using product-level rather than category-level factors.
- Savings goals and monthly challenges for households.
- A white-label tab for banks like Capital One, so any customer can see their impact inside the app they already use.
Built With
- expo.io
- fastapi
- gemini
- googleshoppingapi
- javascript
- nessieapi
- python
- serpapi
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.