All projects
Personal project 01 / Shared expenses

Splitter

A trip can involve several currencies, shared bills and people paying for different things. Splitter keeps those expenses in one ledger and works out the remaining balances.

Working web applicationNext.js / TypeScript / Supabase
Splitter trip ledger showing a fictional Portugal trip, balances and shared expenses.
Actual Splitter interface. All participants, expenses and payments are fictional demo data.
Try a fictional trip

Let families settle together.

Four people, two households, CHF600 in shared expenses.

  • DanAliceCHF 120
  • BenClaraCHF 40
2 paymentsCHF 160 to transfer

Each person settles their own balance.

See the balances
Each person’s share is CHF150. All names and amounts are fictional.
PersonPaidBalance
AliceCHF 270+CHF 120
BenCHF 110−CHF 40
ClaraCHF 190+CHF 40
DanCHF 30−CHF 120

Positive balances are owed money. Negative balances owe money.

Alice & Ben+CHF 80Clara & Dan−CHF 80

Why I built it

I wanted an alternative to Splitwise’s free tier. Splitter also became a way to learn how to ship a web app, deploy a backend and work with an AI coding agent.

How it works

Each trip has its own participants and base currency. An expense can have several payers and can be split equally, by exact amounts, by percentages or by shares. Receipts stay with their expenses.

The app suggests payments to settle the outstanding balances. People record those payments in the ledger; they make the transfers themselves.

A few decisions

I added family-based settlement so a household can settle as a unit. Individual expenses still belong to the people who paid them, but suggested payments use each family’s combined balance.

Unpaid balances can carry into a later trip as opening balances. That means a group can keep travelling together without having to settle every last amount between trips.

An optional AI comment reacts to a newly added expense with a short quip. It adds a little group-chat humour to the ledger; the balances come from the expense calculations.

Keep the history consistent

Exchange rates are saved when an entry is made, so later rate changes do not rewrite the trip’s history. A finished trip can still have unpaid balances. Keeping those states separate makes it possible to finish recording expenses and settle up afterwards.

Current status

A working web application with trip ledgers, expense entry, balances and recorded settlements. The image shows an isolated demo trip.