M²W²
A from-scratch replacement for a 13-year-old family finance spreadsheet — and a hands-on lab for full-stack and applied-AI development.
Overview
M²W² replaces a thirteen-year-old household finance spreadsheet with a real application—and doubles as a hands-on testbed for full-stack and applied-AI development. It is a personal experiment now transitioning from parallel use toward becoming the household’s financial source of truth.
The problem
A household builds its own private taxonomy for money over time — this is a “want,” that’s a “need,” this vendor is actually three different kinds of purchase depending on what was bought. A thirteen-year-old spreadsheet had absorbed all of that judgment into a tangle of formulas that only made sense to the person who wrote them, which meant every fix required understanding the whole history of decisions that came before it.
A generic budgeting app doesn’t solve this, because the taxonomy isn’t generic — it’s specific to how one household actually thinks about its own spending, and no off-the-shelf category list matches that.
The idea
Rather than force spending into somebody else’s categories, M²W² keeps a household-specific hierarchy — Major, Minor, Sub1, Sub2 — as the foundation, and uses a small local model for the one part that’s genuinely tedious: reading a new transaction and guessing where it belongs in that hierarchy. The bet was that categorization is a good AI problem and arithmetic is not, so the model never touches a dollar amount, only a label.
How it thinks
Financial categorization flow — how a raw transaction becomes a categorized, explainable line item.
Each imported transaction first passes through the household’s saved alias rules. Familiar merchants take the deterministic path; unfamiliar transactions are sent to the local model for a suggested category. Human review resolves the remaining uncertainty, while SQL—not the model—remains responsible for every total computed downstream.
In practice
Reasoned detection of the category a given transaction belongs in and providing the user an opportunity to save similar transactions to the same category at a later time.
The import workflow lets a user review each proposed classification and preserve recurring merchant behavior as an alias. Once saved, future matching transactions can bypass model reasoning and follow the known rule immediately.
From notebook to product
An early sketch of the manual transaction-classification problem—and the first question that led to aliases and local model reasoning.
Lessons learned
The categorization model was never the hard part — it’s right often enough to be genuinely useful. The hard part was everything the spreadsheet had been quietly handling for thirteen years without anyone noticing: credit card payments that aren’t really expenses, transfers between accounts that look like income, the same vendor meaning three different things depending on context. Replacing a spreadsheet means replacing all its undocumented judgment calls, not just its formulas.
What’s next
The next test is operational rather than architectural: whether the import-and-correction workflow remains disciplined once the spreadsheet is no longer available as a fallback.
Sole developer — backend, frontend, AI integration, data model — Andy Markowitz