Inspiration
The idea for this project came from a common frustration I faced while splitting bills with my roommates, especially during our Costco runs. Every trip, we’d end up with a long receipt filled with shared and individual items, and the process of calculating who owed what became a repetitive hassle. We’d manually go through the receipt, divide the costs, and send payment requests—sometimes leading to confusion, miscalculations, or delays in getting reimbursed.
I wanted to create a smoother, more efficient solution. Instead of doing the math manually or relying on external apps that required everyone to enter their payment details and wait for others to send money, I envisioned an app that could automate the process. By simply taking a photo of the receipt, generating a shareable QR code, and allowing everyone to select their own items, the app could instantly calculate each person’s share and handle the transaction within the platform.
This project eliminates the tedious back-and-forth, making bill-splitting as simple as snapping a picture and letting technology do the rest.
What it does
This project streamlines the process of splitting receipts by leveraging AI-powered text recognition and real-time collaboration. Users can take a photo of a receipt, and the app utilizes Gemini for character recognition to extract item details automatically. A QR code is then generated, allowing friends to quickly access the shared receipt without needing to manually enter information.
Once inside the app, users can view a real-time interactive list and select the items they purchased. The app supports multi-person selection for a single item, making it easy to fairly divide shared expenses like pizzas or bulk purchases. Past transaction history is also stored, enabling users to review previous receipts and payments for better tracking. Finally, instead of relying on external payment apps, the platform includes built-in in-app payments, allowing users to instantly settle their share of the bill, eliminating the need for manual money transfers and follow-ups.
By combining AI, real-time collaboration, and seamless payments, this project makes receipt-splitting effortless and efficient.
How we built it
For the frontend, we used Next.js with React and TypeScript to create a dynamic and scalable user interface. Styling was handled with Tailwind CSS and shadcn, ensuring a clean and modern design. To manage global state efficiently, we utilized Jotai, allowing seamless real-time interactions. Additionally, Sonner was implemented for intuitive toast notifications, enhancing the user experience.
On the backend, we built a Flask API with Python, serving as the core for processing requests and integrating machine learning. We used Gemini for AI-powered receipt text recognition, allowing automatic extraction of item details from images.
For data storage and authentication, we integrated Firebase Firestore and Firebase Authentication, ensuring secure user management and fast access to receipt data. API communication between the frontend and backend was protected using Firebase security rules.
We used pnpm as our package manager for efficient dependency management, ensuring a smooth development workflow. By combining AI-powered text recognition, real-time state management, and secure API communication, we built an intuitive and seamless bill-splitting solution.
Challenges we ran into
We faced a range of obstacles that really pushed our limits. Designing a UI that offers precise, customizable options without overwhelming users was tougher than expected. We debated how detailed the splitting process should be—whether to let users pick individual items or group them—while still keeping the experience clean and intuitive. Integrating all these options into a smooth, flowing interface required multiple iterations and user tests.
On the technical side, connecting the frontend to the backend was a constant battle. We ran into various HTTP errors that slowed us down, including a notorious 405 error that haunted us for three straight hours. These issues forced us to rethink our API interactions and work hard to streamline the communication between systems. In the end, overcoming these challenges not only refined our code but also improved the overall user experience.
Accomplishments that we're proud of
Despite the hurdles, we're proud to have delivered a robust product in a short span of time. EasySplit now seamlessly converts a scanned receipt into a detailed list of items and quantities, making it incredibly straightforward for users to select exactly what they owe. We implemented intuitive progress bars that clearly show each user's share, which has significantly enhanced the ease of use.
Additionally, the quick generation of QR codes enables a smooth onboarding process for groups, ensuring that everyone can join in and settle their part of the bill effortlessly. Our ability to merge complex backend processes with a clean, user-friendly interface is a testament to our team's dedication and resilience.
What we learned
Many of our group members were new to using such a varied tech stack so we learnt to quickly adapt to new paradigms and integrate them into the project. We also learnt to be able to quickly set small goals as we progressed in our development, making changes as we go if we find out a better method or a flaw in our plan.
What's next for EasySplit
Our next step is to polish up some of our backend implementations such as how we use the Capital One API, our functions to respond to the frontend's request, and the general schema for our database, increasing the speed and efficiency of the app, which is a key goal of this project. We can also look into other options for optical character recognition to increase both the speed and accuracy of the app.
Log in or sign up for Devpost to join the conversation.