Koenraad

Bill Splitter: A Privacy-First Approach to Shared Expenses

Splitting bills among friends, roommates, or travel companions is a common yet often tedious task. While numerous applications exist to address this need, most require account creation, store personal data indefinitely, or come with subscription fees. Bill Splitter takes a different approach: a free, anonymous, and ephemeral solution for dividing shared expenses.

The Problem with Existing Solutions

Traditional bill-splitting applications typically require users to create accounts, provide email addresses, and maintain persistent data. For many casual use cases—splitting a dinner bill, dividing holiday expenses among friends, or managing shared household costs—this level of commitment feels excessive. Users simply want to calculate who owes whom without the overhead of yet another account to manage.

A Simpler Alternative

Bill Splitter operates on a straightforward principle: create a split, share the link, and let everyone add their expenses. The entire process requires no registration, no personal information, and no long-term data storage.

Home page with Create New Split button and four-step workflow

How It Works

The workflow consists of four steps:

  1. Create a Split: Visit the application and create a new expense-sharing session with a single click.

  2. Share the Link: A unique URL is generated that can be shared with group members through any messaging platform.

Split page showing shareable URL with participants

  1. Add Expenses: Each participant joins by entering their name and adds expenses they have paid for, including a description and amount.

Expense entry form with example expenses listed

  1. View the Settlement: Once all participants have marked themselves as finished, the application calculates the optimal settlement—displaying precisely who needs to pay whom and how much.

Settlement results showing calculated payments

Key Features

No Account Required: The application is entirely anonymous. Participants identify themselves only by a name of their choosing within each split.

Automatic Expiration: All data is automatically deleted after 24 hours. This ensures privacy while acknowledging that most bill-splitting scenarios are resolved within a day.

Multi-Language Support: The interface is available in English and Dutch, with automatic detection based on browser preferences.

Mobile-Friendly Design: The responsive interface works seamlessly across devices, making it convenient to add expenses immediately after a purchase.

Mobile view of the split page

Smart Settlement Calculation: Rather than presenting a complex web of transactions, the application calculates the minimum number of payments required to settle all debts.

Under the Hood

For those interested in the technical foundation, Bill Splitter is built on a modern serverless architecture.

Architecture Overview

The application follows a clean separation between frontend and backend:

  • Frontend: A React-based single-page application provides the user interface. It communicates with the backend through a RESTful API and maintains local state to remember which participant you are within a split.

  • Backend: The API runs on Cloudflare Workers, a serverless platform that executes code at the network edge—geographically close to users regardless of their location. This results in consistently low response times.

  • Database: Data is stored in Cloudflare D1, a distributed SQLite-compatible database. The schema is minimal: splits, participants, and expenses, with automatic cleanup of expired data.

U s e r ( R P e a a g c e t s U I ) C l o u d f l a r W e o ( r A N k P e e I t r ) w s o r k D a t D a 1 b a s e

Privacy by Design

Privacy considerations informed every architectural decision:

  • No authentication system means no passwords to breach
  • No email addresses or personal identifiers are collected
  • Automatic data expiration ensures information does not persist
  • Client-side logging anonymises any potentially identifying information
  • No cookies or tracking mechanisms are employed

The Settlement Algorithm

When all participants have finished entering expenses, the application calculates settlements using a greedy algorithm that minimises the number of transactions. Rather than having everyone pay everyone else, the system identifies the optimal pairings between those who owe money and those who are owed.

For example, if Alice paid 60 euros, Bob paid 30 euros, and Carol paid nothing for a 90-euro total, the per-person share is 30 euros. Carol owes 30 euros, Bob is settled, and Alice is owed 30 euros. The settlement: Carol pays Alice 30 euros. One transaction instead of potentially multiple smaller ones.

Use Cases

Bill Splitter is particularly well-suited for:

  • Group Dinners: Quickly determine who owes what after a meal where different people covered different items
  • Shared Accommodation: Split holiday rental costs, groceries, and shared activities among travellers
  • Household Expenses: Roommates can track shared purchases and settle up regularly
  • Event Planning: Coordinate expenses for parties, group gifts, or team outings
  • One-Time Situations: Any scenario where creating accounts in a dedicated app feels excessive

Conclusion

Bill Splitter demonstrates that not every problem requires a complex solution. By focusing on the core need—calculating who owes whom—and deliberately avoiding feature bloat, the application provides genuine utility without the typical friction of modern web applications.

The source code is available for those who wish to examine the implementation or deploy their own instance. The application itself is free to use and will remain so.

Sometimes the best software is the software that does one thing well and then gets out of your way.


Bill Splitter is available at https://billsplitter.nl. The project is open source and welcomes contributions.