khata

A shared household ledger · built for Arunima Adak

The household ledger that reads your messages and settles the fewest times.

A shared home produces a specific, boring, weekly problem: the electricity bill arrives as a screenshot, someone paid it, and three weeks later nobody can remember who covered what. khata reads the messages, keeps the evidence, works out the shortest way to settle, and seals every change so the number can be checked instead of believed.

No account, no key, no install. This book belongs to the browser you are reading it in.Built for my sister, who shares a flat and loses the thread of who paid for what.

Your book

Our flat

kept in INR · 2 members

Chain

52C4687A97B4

The current head of this household's chain.

Today

Saturday, 03 October 2026

Rates are fetched live from the European Central Bank via Frankfurter, and labelled with their as-of date wherever they appear.

The whole loop, four pages

  1. 01

    Reader

    Paste the messages that actually arrived. A rule engine reads them instantly with no download, and an open-weight NLI model in your own browser re-decides the directions rules get wrong.

  2. 02

    Ledger

    The book. Every line keeps the message it came from, its currency, the rate captured on the day, and who has agreed it.

  3. 03

    Settle

    A beam that tilts by the real imbalance, and a transfer plan provably using the fewest payments the balances allow.

  4. 04

    Export

    A statement you can download in three formats, or send as a link the other person can check without believing you.

Four things this will not fake

The model runs on your machine

MobileBERT NLI, int8, from Xenova/mobilebert-uncased-mnli. Downloaded once into your browser's cache and executed through onnxruntime-web. No API key exists in this project. After the first load it works with the network switched off.

The arithmetic is exact

Amounts are integer minor units. Splits use the largest-remainder method, so three ways always sums to the whole exactly — no stray paise to argue about.

Every change is sealed

Per line, a chain of SHA-384 over canonical JSON. Replay it on the verify page and it names the first event that no longer matches.

Nobody else's book is reachable

No accounts, no login. Ownership is an unguessable HTTP-only cookie, and an owner id in a request body is never trusted.

Why open, specifically

A household ledger is one of the few things where a closed API is not just a cost but a structural problem. Every message about who paid the gas bill is personal financial data about two real people, and a service that reads it does not have to be trusted to forget it.

Here the reader runs in the page. The messages are not sent to us to be classified — they are already in your browser, because you pasted them there.

It also means it works where nothing else would: a laptop on a train with no signal, on a holiday where the roaming is off, or in a flat whose broadband is one of the things being argued about. The rule engine needs no network at all; the model needs only its first download.

And it is swappable. The model is one string in src/lib/local-model.ts. Point it at a different open-weights checkpoint, or swap the in-browser model for a local Ollama daemon running gemma3:1b, and the rest of the product does not change.

this book, right nowseal 52c4687a97b46b47e7238dafe7f0a4e409a4562040e7978d35beaa7117cce710ef0b32e6340bb6e94f5494c4c6a5894eTry the agent toolsStar on GitHub

khata is a bookkeeping tool, not a financial adviser. It records what people in one household tell it and computes the arithmetic between those records. A settlement it produces is an agreement between two people, not a judgement about money, and it says nothing about whether anyone can afford what they are spending. Amounts shown as converted are converted at the exchange rate captured on the day the line was written, not at today's quote.

Exchange rates by the European Central Bank via the Frankfurter API. Consumer prices from World Bank Open Data. Model weights from the Hugging Face hub, Apache-2.0. Typography: Newsreader, Anek Latin and Azeret Mono, all SIL Open Font License.