I like to invite some friends over to our place and so we can cook a nice dinner together ☺. Sometimes we make fancy stuff, which is needs some expensive ingredients, so we want to split the costs between us. But you don’t want to exchange money, when you sit at dinner table, but you don’t want to forget the debts either. Martin an I decided to write a tool, that keeps track of your money. At the end of the month, the tool will send emails who owes whom.

We basically just store events, that have a specific amount and exaclty one owner. Every event has a list of participants, where each participation can be in a different state (like created, accepted, declined, payed,…).

class diagramm of splitpot

The tool has two cool features, I want to explain in short.

Your Email is all You need

A user has to have an account, to create an event. He has to enter emails of all participants, but these participants don’t have to be registered users. Splitpot sends emails to all these addresses and attaches an invitation-link to every non-registered address. Users have the choice to register, or ignore Splitpot and won’t get any mail until payday. You can have multiple email addresses that belong to the same account, if you’re a chaotic human being, that has multiple email addresses in use ;)

Transaction-Graph Optimization

You have some friends, that are befriended between each other as well. So the people you’ll invite, will invite each other as well. We can use this social net wo reduce the total number of transaction the users have to do on payday:

debts between users, unoptimized

You see, that Bob owes Derpette 2.7€ + 5€, Derpette owes Charlie 2.10€ and Charlie owes Alice 0.80€ and Alice owes Bob 8.30€ ⇒ we have a circle! We look at the circle and see, that we can subtract 0.80€ in every transaction on the circle, which will remove the transaction from Charlie to Alice. We continue until there are no circles in the graph.

debts between users, unoptimized

Open Source

The project is currently still under development. You can watch us on our Github repository. There is an (incomplete) instruction for installing a Splitpot on your own server. As you can see, there are still some open issues. The project is based on

Co-workers: Martin Dinh