Inspiration
Impulse buying is a $300 billion problem in the US alone, and it hits hardest for college students and young adults who are just starting to build financial habits. We've all been there: you're two clicks from checkout on something you don't need, and nothing stops you. We wanted to build the little voice in your head that actually does.
What it does
CartCoach is an AI-powered Chrome extension that intercepts you at the moment you're most likely to overspend: checkout. When you're about to buy something, our mascot Mochi pops up with a real-time financial analysis of your purchase: a personalized risk score, impact on your monthly budget and savings goal, cheaper alternatives scraped live from eBay, and a Gemini-powered nudge tailored to your financial profile. You can skip the purchase, save it to your wishlist for later, or go ahead, and every decision gets tracked. The dashboard gives you a full picture of your financial habits: spending by category, investment projections, a personal accounting ledger, and a chat interface where Mochi answers your money questions directly.
How we built it
Frontend: React + TypeScript + Tailwind CSS, bundled with Vite as a Manifest V3 Chrome extension. The modal is injected via iframe to intercept checkout pages without breaking host site CSS.
Backend: FastAPI with full async/await, connected to MongoDB via Motor (async driver). Ledger data is stored in dynamically-named per-month collections (e.g. ledger_2026_3) with compound indexes on user_id + date — keeping records partitioned and queries fast as data scales.
Finance Engine: Custom module computing real-time budget impact, savings goal delay in days, and compound investment projections using S&P 500 growth rates, all calculated per purchase at request time.
AI: Gemini 2.5 Flash handles purchase intent classification, a personalized chatbot that receives the user's live budget and savings context on every request, weekly summaries, and alternative product explanations.
Alternatives: Playwright-based eBay scraper that finds real live listings cheaper than the item being considered, returned and ranked dynamically per product.
Challenges we ran into
Injecting UI into third-party websites without breaking their layouts was our biggest hurdle. Tailwind's CSS Preflight reset was leaking into Target's checkout page and misaligning their buttons. We solved it by isolating our modal inside a position: fixed iframe. Getting the Gemini API working correctly also took iteration; the model we initially used had been deprecated, causing silent fallback responses that we had to trace down. Coordinating a multi-person team on a shared codebase during a hackathon also meant frequent merge conflicts and careful Git workflows throughout.
Accomplishments that we're proud of
The full loop actually works end-to-end: CartCoach detects a real checkout page, extracts the product, hits our backend, gets a Gemini-generated risk analysis, scrapes live eBay alternatives, and displays everything in a polished UI in under two seconds. We're also proud of Mochi. The mascot gives the whole experience a personality that makes financial coaching feel fun and approachable instead of preachy.
What we learned
We learned how complex Chrome extension architecture really is. Content scripts, background service workers, iframe isolation, and message passing all have to work together precisely. We also learned that UX matters enormously for behavior-change tools: if the intervention feels annoying or robotic, users dismiss it immediately. Making Mochi feel like a friend rather than a warning label was a deliberate design choice that shaped every UI decision we made.
What's next for CartCoach
- Browser sync so your spending history follows you across devices
- Support for more retailers and international sites
- A "payday mode" that unlocks your wishlist when your budget resets
- A mobile companion app so Mochi can coach you outside the browser
- Social features where you share your savings streaks with friends and hold each other accountable



Log in or sign up for Devpost to join the conversation.