Inspiration

As college students, we find ourselves sharing payments all the time. Living under the same roof means that many subscription services—like Spotify or Netflix—can be shared for significant savings. When getting dinner, we each try to pay for our own meals. Though convenient in the beginning, these processes can end up fairly burdensome. Splitting a subscription requires one individual to pay up front: for us, the responsibility of knowing who pays for what lies in a mess of spreadsheets. In our apartment is a shelf piled full of receipts—groceries we promised to divide evenly but will likely never be reconciled. Every dinner is guaranteed to end with the same discussion: "do you have Venmo? I don't use PayPal."

With this shared frustration, we were inspired to find a solution.

What it does

SplitPay is primarily a web application, supporting both mobile and desktop, but can be installed on Android like a native app. The project has two main features.

First, our application offers a way to create virtual cards funded by groups. Essentially, if my friends and I wanted to share a household Spotify subscription, we could each create our own SplitPay accounts, link a payment method, and form a group. Each group has an associated virtual debit card, which charges the members based on an agreed distribution. This virtual debit card can then directly be used as the funding source for the subscription, removing the need for participants to pay ahead of time or keep track of monthly reimbursements. This feature comes with additional utilities as well: to name a few, users can view past transactions and set spending limits.

Another feature of the project is an AI-powered reimbursement tool. Instead of fiddling around with mobile payments and struggling to compute tips and taxes, the person paying the bill can simply take a picture of the receipt with SplitPay. Then, the app will automatically parse the expense to extract an itemized list. Users can access the list using a short numeric code, choose the items they purchased, and easily reimburse the initial payer. Once the transaction is resolved, the funds can be withdrawn using a number of payment methods (thanks to Checkbook!)

How we built it

In order to accommodate these features, we used a number of financial APIs. First, Checkbook provided a very straightforward way to distribute payments. Usually, paying users of an application is a very frustrating process, as developers need to step through complex legislation and use APIs that aren't very friendly. These might involve complicated KYC flows, and often result in a very limited set of choices for the end user. However, Checkbook makes this process very easy, and using their Payments API was as simple as providing an email address. We were initially apprehensive about dealing with traditional consumer payment systems, and Checkbook was a welcome surprise. Their API allows us to very painlessly process reimbursements after their resolution with our AI-powered tool.

To issue virtual cards and receive payments, we used Lithic and Stripe respectively. Using a number of different API providers allowed us lots of flexibility to design our user experience as we wished.

More generally, our app has a Express.js backend and a React.js frontend. Storage is managed using SQLite. Our server exposes more than 25 API endpoints to support the full functionality of the project.

Challenges we ran into

One significant challenge was dealing with the Lithic and Stripe APIs. These providers require deep integration into both the frontend and the backend of applications. We needed to both make requests to their APIs and listen for webhooks. Since these providers are subject to heavy regulation, many features are inaccessible without explicit approval or enterprise subscriptions.

Another challenge was managing the scope of the project. The initial idea was very flexible and had room for many more features. For instance, adding functionality for performing bank transfers instead of using virtual debit cards could be useful for people sharing rent. We also considered possible Web3 integrations to derive interesting behavior from multi-sig wallets. Ultimately, considering that our team had only two members, we decided to stick with the features which seemed most useful.

Accomplishments that we're proud of

We are honestly very proud of building a fully functional app in the short time we had. Our project integrates many external systems, and many aspects of its implementations required that we think deeply about security. This project also helped us gain more experience designing user interfaces, as both of our members came from engineering backgrounds.

What we learned

Dealing with money is hard! Many APIs are (understandably) very restrictive, and correctness is very important when user funds are on the line. Additionally, as pariticpants with no hackathon experience, the opportunity to quickly iterate and take risks helped change our perspective on writing software. Despite being very tired and getting a little sick of writing React, we had a ton of fun.

What's next for SplitPay

We really think SplitPay fills an interesting and important gap in consumer payments, and there is still lots of work to be done. For instance, a number of features could be further fleshed out with stronger configuration options and better integrations. Our project is a promising proof-of-concept for addressing the challenges of shared payments!

Share this project:

Updates