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.
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 decision | What 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
| Module | Lines | Stmts | Covered | What it does |
|---|
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 wrong | What found it | State |
|---|
What it will not do
The short list, including the one that matters before you put it on a network.