← Lyon Works

Where's Money 錢去哪了

The expense tracker that got planned to death, then built itself in an hour.

01 — The Spark

Manual tracking dies quietly.

Not in one dramatic quit, but in a slow drift of missed days that turns into missed weeks. The problem was never understanding where money goes. It was the friction of typing it in every single time.

The fix seemed obvious. Payment apps and banks already email you every transaction. Why type it twice?

02 — The Dig

Before writing anything, the plan got interrogated properly.

This wasn't "ask AI, get code." Real transaction email samples from PayNow, banks, and other payment services got pulled apart to find the actual parsing patterns, since every sender formats things differently. A direction problem got caught early too — outgoing payments and incoming transfers can look nearly identical in an inbox if you're not careful about what you filter for.

A live cost comparison ran between two different AI providers for the classification step. At personal use volume, the honest answer was that either would be basically free, so the decision came down to fit rather than price.

Security got a deliberate, honest tradeoff too. A simple passcode gate, not full authentication. Good enough for a personal dashboard with no sensitive data, upgradeable later if that ever changes.

By the end, there was a full architecture on paper: scheduled scans, a cost-saving pre-filter before any AI got involved, structured categories with an "Others" fallback instead of forcing bad fits.

03 — The Pivot

Before touching any of it, one question got thrown at Gemini Spark almost as a sanity check.

Could it read the inbox and summarise this month's spending? It came back with a categorised breakdown, spend grouped by type, each line traced to the actual email it came from. Accurate, on the first try.

Once that was validated, it got handed the same weekly schedule already sitting in the plan. Scan the inbox, extract the transaction, assign it a category, skip anything already logged, flag anything it wasn't sure about. It just worked.

04 — Under the Hood

What's actually running today.

A weekly scheduled scan across bank alerts, e-commerce receipts, delivery apps, and recurring bills. Each transaction gets categorised, cross-checked against what's already logged so nothing gets double-counted, and anything uncertain lands in "Others" for a manual look rather than a bad guess.

Year-to-date expenditure breakdown by category

Year-to-date spend, auto-categorised and charted — no dashboard build required.

A summary tab consolidates the year, charted as a pie and bar view. Manual entries — cash spend, anything with no email trail — get added straight into the sheet the same way the plan always intended.

Beyond the scheduled scan, the sheet doubles as something to talk to. Ask which category ran highest this month, ask for a fresh chart, ask for a quick summary, and it answers directly from the data already logged.

Asking the tracker which month had the highest total spending

No dashboard needed to answer a follow-up question — just ask.

Running cost sits inside an existing subscription. Effectively zero marginal spend.

05 — What I Learned

The planning took longer than the build.

It's a weird feeling more than an uncomfortable one. A weekend had been set aside for this. It got done in under an hour instead.

The tempting read is "maybe I over-planned." That's the wrong lesson. It worked that fast because the homework was already done. Gemini Spark had a clear, well-scoped instruction to execute against, not a vague idea to figure out. A tool can only move fast when it knows exactly what it's being asked to do.

Good plan plus a decent tool gets you progress. Good plan plus a great tool gets you this. The variable that changed was the tool, not the need for the plan. Maybe there's some luck in finding a tool this well suited to what was already mapped out, but the mapping is still what made the luck usable.

There was a bonus too. The plan scoped a fixed dashboard. What showed up can answer follow-up questions the plan never asked for. That's a different kind of surprise than speed — it's not that the tool executed the spec well, it's that a good plan left room for a good tool to go past the spec on its own.

✓ What Worked

Doing the research and design first, even though the execution took a different path than expected. The plan is the reason the output is trustworthy, not just fast.

↯ The Constraint

Everything here lives inside a Google Sheet. No public artifact, nothing to click into on lyon.works. Which is exactly why this one lives as a reflection, not a prototype.