Inspiration
During my study abroad in Europe, my friends and I constantly faced the same problem: one person would pay for group dinners or buy train tickets for everyone because it was faster and avoided bank fees. But then came the awkward part, endless texts asking "how much do I owe you?" Over 250,000 American students study abroad each year, and nearly all face this exact friction. I realized we needed an app that could automatically track these shared expenses and send smart reminders, transforming an awkward social dynamic into a frictionless process. Beyond travel, the same problem applies to roommates splitting groceries and utilities, or simple outings with friends and family which made me realize it is a problem for many as well.
What it does
Smart Receipt Processing: Users photograph or upload a receipt, and Gemini Vision API automatically identifies each item and suggests fair splits (equal split for group groceries, or itemized by person for restaurant bills). The app achieves approximately 98% accuracy on receipt parsing while still keeping the user in control.
Collaborative Dispute Resolution: A built-in group chat lets members discuss ambiguous charges in real-time, eliminating fragmented text threads across multiple apps.
Accountability Through Streaks: Users earn on-time payment streaks that encourage consistent, timely settlement which turns payment deadlines into a friendly competition rather than a chore.
How I built it
Most components of the app have been built using MeDo. I started by creating the less interactive parts such as the UI for each page and then I began to add some interactivity to each page and then creating the relational database system for the backend. I often worked on making small changes that did not need to be prompted
Challenges I ran into
The biggest hurdle was designing the relational database to handle complex group structures (multiple groups per user, overlapping memberships, transaction histories). I had to iterate multiple times on table schemas and foreign key relationships before getting it right.
- I also debugged tricky navigation bugs where page routing would redirect users incorrectly or back-button behavior was unpredictable, this forced me to really understand my codebase's architecture.
- I also struggled with getting al the states across all the different pages to be the same and record the updated version for each payment
Accomplishments that I'm proud of
- I'm especially proud of how I integrated Gemini as a feature, not a gimmick. The API handles receipt parsing, but users always maintain full control over splits and assignments.
- The state handling and management. There is a lot the needs to be kept track of for each group and I was able to get each state to reflect on the correct page
- I'm also proud that I transformed a personal frustration into a solution for millions, which I is the best kind of product inspiration.
What I learned
- Through building the application, I learned the critical skill of prompt engineering (how to write effective instructions that reliably get the desired output from AI).
- I also learned to read and debug unfamiliar code.
What's next for Splitly
- Integrate Plaid/Stripe to auto-sync bank transactions and verify payments rather than depending on users to manually do this.
- Implement settlement optimization to calculate the minimum number of transactions needed to settle all debts within a group.
Built With
- gemini
- javascript
- medo
- node.js
- postgresql
- react
- supabase
Log in or sign up for Devpost to join the conversation.