bethel-nz
/Billy
/project2026
/project2026

2026

Billy

Track subscriptions and bills by typing them in, with reminders and a calendar. Your data stays on your device.

Visit project ↗
Role
Product + eng
Problem
Bill trackers want a form and an account. Spending history is sensitive; typing every field is the friction.
Constraint
Offline-first, parse on device, leave with your data — no sync backend required.
Outcome
One local store drives capture, calendar states, reminders, analytics, export, and a one-string backup.

Bills live in email, bank apps, and calendar pings — not in one clean system. Most trackers start with: make an account, fill a form.

I wanted: type the sentence already in your head (Netflix £15 monthly), keep the data on the device, still see due / overdue / paid without a server.

Capture is the product

Billy’s main surface is the command editor, not a decorative AI box.

Inputs like Netflix £15 monthly, pay Spotify, bought a car for £12,000 over 24 installments. Intent first (add / pay / cancel / …), then a deterministic billing parser for amount, currency, cycle, dates, installments, reminders — on device, no model round trip for the core path.

Editor can change without rewriting billing rules; parser can grow without free-text leaking into the schema.

Fig.Billy command editor turning a natural-language bill into a structured record

Local-first was the product call

Spending history is intimate. Billy keeps subscriptions and payments in browser TanStack DB collections, validated at the boundary. No required login, no hosted app DB.

Tradeoff is real: browser storage can vanish, no magic multi-device sync. So portability had to ship as a core behaviour, not a future settings item.

Fig.Billy offline billing calendar with recurring and installment records

Backup is a string

“Local” is useless if changing phones loses everything. Full dataset → versioned payload → one URL-safe string (note, password manager, QR). Import shows a diff (new / updated / deleted); updatedAt breaks ties.

Copy to back up, paste to restore. Not seamless cloud — a transferable artifact.

Fig.Billy settings showing snapshot transfer, calendar, and export controls

Store facts, derive UI

Dates, cycles, amounts, payment events, payoff terms live in the store. “Upcoming” / “overdue” are projections at view time.

Subscriptions renew; payoffs approach zero — different lifecycles, same capture surface. One payment write updates history; calendar, open bills, progress, reminders, exports recompute from the same facts.

Fig.Billy payments view deriving overdue, upcoming, and payoff states

What ships today

Describe a bill → calendar → mark paid → spend view → reminders → export/move. No account.

Reporting keeps original currencies, normalises into a base for totals. Same local records power categories, velocity, history, payoff, .ics, CSV, printable report.

No fake adoption numbers. Evidence is the working product and how little machinery it needs: capture without network, view without server, backup as one string.

Fig.Billy analytics showing monthly spend, categories, velocity, and payoff balance