Inspiration
Last year, my friend and I decided to build an app for splitting payments with friends.
We were on a group vacation and trying to split a bunch of bills every day, so we were searching for an app. Every app we tried suffered from a clunky UX or intrusive ads getting in the way. So we decided to build an app ourselves that's simpler and focuses on a great UX, and most importantly - ad free forever!
What it does
With Quicksplit, you can create tabs to manage payments and expenses with groups of people. Once you’ve created a tab, you can invite your friends and family to join, or add placeholder users for people who don’t want to download the app.
After setting up your tab, you can add payments with splits for how much each member owes. When you’ve added a few payments and you want to settle up, Quicksplit calculates an efficient way for you to transfer money between each other to make it quick and easy. All members of the tab can also be notified when payments are added so you can keep track of how much you’re spending.
How we built it
Quicksplit is a native iOS app (web app coming next!) - it's built with SwiftUI, plus a touch of UIKit for navigation. We’ve tried to keep the app simple and the binary size small by minimising dependencies and utilizing SF symbols.
It’s built in a modular way with each feature split into its own local SPM package for quicker build times and to prevent scaling issues long-term. We also have a package for our design system components, which allows us to build new features quickly, whilst maintaining consistency with the rest of the app.
The backend API is written in TypeScript and running on Deno & Postgres, hosted on Fly.io and Supabase.
Our users often travel and may have limited bandwidth - we chose Fly.io for hosting our backend so we can easily spin up servers close to our users.
Challenges we ran into
Implementing Sign in with Apple was a challenge due to a lack of good documentation. We spent a long time researching how to implement it in a secure way, and ran into some issues with setting it up for both web and app simultaneously, but we're really glad we've implemented it as it makes it so much easier to sign up.
Accomplishments that we're proud of
Since we don’t have an Android app, we needed to make the app work for groups who weren’t all on iOS. We didn’t have time to ship the web app so we settled on placeholder members, which allows users to add their friends who don’t have the app. There was a lot of work migrating our data model and updating the UI to support this feature. We knew some users would use it.. but we didn’t expect almost every tab on Quicksplit to have placeholder members.
What we learned
Working on a side project whilst having full time jobs is difficult. We only had a few hours here or there to work on Quicksplit, so we learned to make sure to plan ahead. Discussing things before working on them allowed us to spot any potential issues and maximize the use of our time.
Testing out new technologies like Deno is fun and can be a valuable learning experience, but it caused us a lot of headaches, especially when we were so limited on time.
What's next for Quicksplit
Build a ton more premium features. We have loads of ideas such as payment categorization, adding payment locations, AI receipt scanning, integrating with Apple Intelligence and more. We also want as many people as possible to be able to use Quicksplit for a strong network effect, so we're working on a web app!
Built With
- deno
- fly.io
- postgresql
- supabase
- swift
- swiftui
- typescript
- uikit
Log in or sign up for Devpost to join the conversation.