Inspiration

We've all been at a place where we checking our bank account and having no idea where our money went. As college students ourselves, we built StudentSteals because budgeting apps feel like they're made for adults with salaries, not students surviving on dining hall food and instant ramen.

What it does

StudentSteals is an AI-powered student finance app with three core features. The Steals tab uses your GPS and Google Places to find real nearby businesses, then Gemini AI generates personalized money-saving tips for each one. The AI Coach is a conversational Gemini-powered chatbot that gives personalized financial advice based on your actual spending. The Budget tab lets you set monthly category budgets, connect your bank account via a Plaid-style sync that auto-categorizes your transactions, and get AI-generated spending insights.

How we built it

The frontend is built in React with a mobile-first phone UI using entirely custom CSS , no component libraries. The backend is a Python Flask API that handles all AI calls to keep API keys off the frontend. We used the Google Places API for hyperlocal business discovery and Google Gemini (gemini-2.5-flash) for the AI coach, deal tips, and spending insights. We batch all 10 nearby places into a single Gemini prompt to keep costs near zero. Transaction categorization runs locally with a keyword map.

Challenges we ran into

The trickiest bug was the map, clicking a deal on the Steals tab was supposed to fly the map to that marker, but the map was fetching its own separate set of places, so the markers never matched. We fixed it by lifting the deals state up to the parent component so both the Steals tab and Map screen share exactly the same data. We also had to carefully engineer the Gemini prompt to return clean JSON every time without markdown formatting breaking the parser.

Accomplishments that we're proud of

The entire AI pipeline, nearby places, deal tips, coaching, and spending insights runs on just 2-3 API calls per session, making it genuinely cheap to operate at scale. The bank sync flow with live transaction categorization looks and feels like a real fintech product. And the whole app is built in a single React file with a fully custom dark UI that actually looks like something students would want to open every day.

What we learned

Prompt batching is incredibly powerful, instead of making 10 separate Gemini calls for 10 places, one well-structured prompt handles everything at a fraction of the cost. We also learned that state architecture decisions made early save you from an entire class of bugs late, lifting state to the right level was the difference between a broken map feature and a seamless one.

What's next for StudentSteals

Real Plaid integration for live bank data, push notifications for deals when you're physically near a participating location, student ID verification to unlock exclusive campus deals, and a social layer where students can share steals with their campus community. Long term, we'd love to partner directly with businesses near universities to offer verified student discounts inside the app.

Built With

  • cartodb
  • flask
  • flask-cors
  • flask-cors-apis:-google-gemini-2.5-flash-(ai-coach-+-swaps)
  • google-gemini-2.5-flash
  • google-generative-ai
  • google-places
  • google-places-api-(nearby-deals)
  • javascript
  • javascript-(jsx)-frameworks/libraries:-flask
  • leaflet.js
  • leaflet.js-+-openstreetmap-+-cartodb-(map)-python-packages:-google-generativeai
  • math-(standard-library)-platforms:-node.js-/-create-react-app-(frontend-dev-server)
  • openstreetmap
  • plaid-(ui)
  • python
  • python-3.9-(backend)-future/demo-ready:-plaid-(bank-connection-ui-is-built
  • python-dotenv
  • react
  • react-markdown
  • requests
Share this project:

Updates