Every account, one ledger.
Cash, cards and precious metals in a single net-worth view. Budgets that only ever count what you actually spent, prices that always say how old they are, and a ledger that never leaves your device.
- Platform
- Kotlin · Compose
- Storage
- On-device
- Prices
- CoinGecko · metals.dev

v1.0 · local-onlyThe app, screen by screen.
Twelve screens from the design book — accounts and transactions through budgets, assets and settings. Light system-gray canvas, white rounded cards, saturated category tokens, green income and red expense.

Accounts — home
Net worth up top, then cash accounts and the metals portfolio. One list, one currency.

Transactions
Grouped by day with a running daily total; the period's income, expenses and net sit in the header.

Add transaction
Income, expense or transfer on a keypad sheet — account first, then category, then amount.

Analytics — expenses
Spending by category for the period. Transfers are excluded throughout — moving money is not spending it.

Analytics — total
Daily net is zero-centred, so a loss reads as below the line rather than as a shorter bar.

Categories
The year at a glance, ranked by share of spend.

Budgets
Over budget is its own group, not a red row you have to scan for. Unbudgeted categories are listed but excluded from the header total.

Budget detail
Left to spend goes negative instead of clamping at zero — a clamped figure hides the size of the breach.

Set a budget
Roll-over and a warning threshold, each spelled out in money rather than in settings language.

Asset detail
A price is never shown without how old it is, and where it came from.

Net worth over time
A figure that could not be valued or converted is named, never quietly zeroed.

Settings
Main currency is a reported value, not a field — price history is kept in it. CSV in, CSV out.
Six things, done properly.
One ledger
AccountsChecking, savings and credit cards alongside the metals you hold, rolled into a single net-worth figure. Every balance in the main currency, chosen once at setup.
Budgets that can't lie
Expense-onlyBudgets read no price, ever. Transfers never count — buying gold isn't spending — and a realized gain on a sale is never income, so it can never fill a budget.
Metals & assets
PortfolioQuantity, average cost, cost basis, unrealized and realized gains per asset, priced from CoinGecko and metals.dev with the age of every quote on screen.
Analytics
PeriodSpending by category, cash flow, and a zero-centred daily net — with a period stepper that runs from a week to all time, or a custom range.
CSV in, CSV out
DataImport an existing export or any other CSV, and write your ledger back out in the same shape it reads in. Your data leaves as easily as it arrives.
Local-only
PrivacyNo account, no sync, no server. Everything stays on the device — which is also why the danger zone says nothing can be restored.
The ledger doesn't round in your favour.
- A price always carries its age
- No quote is ever shown on its own. Every figure says how old it is and whether it was fetched or hand-entered.
- Unvalued is named, not zeroed
- An asset with no price, or a currency with no exchange rate, is listed and excluded — never folded into the total as zero.
- A breach is the first thing you see
- Over-budget categories get their own group at the top, and what's left to spend goes negative rather than stopping at zero.
TrackedWallet 1.0 — local-only, no account. In development; there is nothing to sign up for yet.
Back to The Lab