tally · port 5005

Record what you spent, in the seconds after you spend it

A phone-first expense tracker. Open it, tap an amount on a keypad, tap a category, save — two taps if it is something you buy often. It captures the one thing a bank statement cannot: what a purchase was, while you still remember. It converts nothing and reconciles nothing, because the app next door already knows the exchange rates and this one does not.

Repository Open app (local)

Six decisions, and what each one is avoiding

None of these is a preference. Each is a specific way the obvious version of this app gets a number wrong.

The decisionWhat it prevents

A keypad, not a text field

Digits shift in from the right the way a till works, so there is no decimal point to place and none to get wrong — and no keyboard to wait for.


  

Two taps for a habit. Anything bought three or more times in the last 90 days becomes a one-press button carrying its own amount, category and note. A habit is a category and an amount: "Coffee" is no shortcut if it is sometimes 2.50 and sometimes 18.

Nothing is lost to a bad connection

The order matters. An entry is written to localStorage before the network is touched, and cleared only once the server confirms it.

The file it hands to the other app

/export.csv uses exactly the four column names the wallet importer recognises, so it imports with no column mapping at all.


  

Every module, by size

Where the tests are

Bugs, and what found each one

Every assertion in the suite is something that was got wrong first. These are the ones worth naming.

What was wrongWhat found itState

What it will not do

The short list, including the one that matters before you put it on a network.