Vatni: from a spreadsheet to a bill splitter


Vatni started with a spreadsheet I got tired of making.

On every trip and every outing, I became the person who built the Google Sheet to split the bills. It took about an hour. Then the follow-ups started. Someone would say they never had that random apple cider, and nobody could remember, because it was ten days later. I wanted to split the bill right there, at the table, while everyone still knew what they ordered, and hand out a PDF at the end.

Naming Vatni

The project began as “BillSplitter”, because that is what it did. Then the AI boom filled every app store with SplitQuick, SplitFast and a hundred cousins. I wanted a name from closer to home.

In Marathi, वाटणी (vatni) means a partition: the division of property among co-owners or family members. A वाटा (vata) is one share. Anyone who has watched a family argue over who gets which plot of land knows the word, and knows it is usually said in a lowered voice.

It is a funny name for an app that divides a dinner bill. Nobody is fighting over land here, only over who ordered the apple cider. I used to think splitting things up was a modern, western idea. It isn’t. Hindi has a phrase for it too, “तेरा तेरा, मेरा मेरा”, which means yours is yours and mine is mine. We have been dividing shares for generations, and feeling the pain of it for just as long.

Version one

I began in 2024. I was already building React projects and wanted to make something people could use, not another demo. The first prototype was a multi-step form. Add the items, assign them, see who owes what, export a PDF. No confusion, no spreadsheet.

I also thought I didn’t need a backend. That was wrong, though it took a while to show. The only server piece was a Cloudflare Worker that proxied receipt images to a vision model on OpenRouter. When vision models arrived, OCR stopped being a hard problem. I could photograph a receipt and get the line items back, and the Worker only had to keep my API key off the client.

Outgrowing the form

A single bill was never enough. People wanted several bills in one trip, different currencies, and a group that could edit the same split together. The form was the wrong shape for that, and so was the Worker.

Live collaboration needed a real server, so I moved to a VPS. The multi-step form turned into many pages, which meant adding React Router. The app also stopped being only a bill splitter, which is why it has its own name now.

Claude changed the pace here. I could keep extending the app toward what I had in mind instead of stopping at what I had time to write by hand.

My first server was .NET. I noticed the RAM usage, and the bloat of code and features I didn’t need for this. Minimal API was good, but I had always wanted to play with Go, and this was a good chance. I started with the basics of the syntax and how to build an HTTP server, then designed the API endpoints for the project.

Compared to .NET, Go with SQLite 3 is a powerhouse, and it scaled well. With 1000 concurrent users, the server stays calm at 30% CPU. A single core with 512 MB of RAM handles far more requests than I had expected.

What I rebuilt

State was my biggest mistake. At first I passed data around with React Context and saved it to localStorage as one global store. That worked until it didn’t. Moving to zustand, with several small stores, made me noticeably faster, because each feature owned its own data.

Zod arrived later, once the data coming in from the server and from the model needed checking. I wish I had started with it.

One thing I got right was writing tests from day one. They paid off most after I started using Claude Code. The assistant could change a lot of code quickly, and the tests caught the mistakes before I did.

How it works

A walkthrough of the screens, from a session to the final settlement, is in How Vatni works.

Privacy

Vatni keeps your data private. Online sessions keep their data for a limited time only, and you can delete a session whenever you like.

Where it is now

An hour of spreadsheet work now takes about two minutes.

Vatni is tailor-made for me and my friends, for the way we split things. I wrote more about why that is now worth doing in the intro post.