Using AI to create Receipt Split
Background#
Over the past few years, I’ve always struggled with splitting the bill at a restaurant. I’ll pay for the bill, take a picture of the receipt, then wave my hands saying, “I’ll get to it eventually.”
Eventually never really comes.
A few years ago, while playing around with Supabase and its latest releases, I noticed their focus on delivering features to support “multiplayer” experiences. I thought receipt splitting was a classic multiplayer mini-game. Everyone ordered something on the receipt, but there’s a bottleneck in figuring out what and how much they owe. It felt like a great excuse to play around with a new framework, learn some skills, etc.
That said, life tends to get in the way. Since that fun side project idea came up, I’ve:
- Finished my master’s program in Stats
- Gotten married
- Built and sold a startup
- Joined a startup hedge fund
- … had a kid (last week!)
So, I never really got around to the receipt splitting side project. However, while on paternity leave, I figured I had a great opportunity to toy around with AI, since I wasn’t committed to delivering anything serious. That’s when I came across Jules (jules.google.com).
Enter Jules#
Here’s how Google’s docs describe Jules:
Jules is an experimental coding agent that helps you fix bugs, add documentation, and build new features. It integrates with GitHub, understands your codebase, and works asynchronously — so you can move on while it handles the task.
With Jules, I was able to create an app purely through prompts and have it figure out how to wire everything together. It’s just one example that shows how basic coding tasks are clearly covered by AI tools now.
Around 12 hours later, here’s the result: Split
Split#
With Split, a user can:
- Upload a receipt or manually enter receipt line items
- Generate a shareable link for others to “claim” the items they ordered
- Click a link to Venmo the payer the amount they owe
Takeaways#
Using an AI tool like Jules was great! The combination of Vercel branch previews, Jules-constructed branches, and GitHub meant that my workflow looked something like this:
- Describe a feature request to Jules, have it construct a plan, then build the feature. If the plan made sense, I’d let it run.
- Tell Jules to push the branch to GitHub. Open a PR for the branch (if it didn’t already exist).
- Open the Vercel preview deployment and play around with the app to ensure it generally worked.
- Review the PR to make sure it was somewhat reasonable. (I’ll be honest — I didn’t spend much time here, since I’m no TypeScript wizard.)
This loop took about 10–15 minutes per iteration with Jules. Pretty great, though not perfect. A handful of iterations were wasted on minor visual tweaks or misunderstood logic.
Ultimate Verdict#
Had I spent the time to learn the frameworks, tools, etc., I probably could have built this product in around 5 hours of focused work. It’s not too complicated. That said, with Jules, I didn’t really need to review much of the code — just had to wire things together (like run some initial SQL, for example).
In some ways, using Jules felt like playing whack-a-mole — but with a really fancy mallet. You can get a lot done, but the AI isn’t really reasoning about high-level outcomes. It’s just trying to solve PRs.