Inspiration

For years I've watched people (myself included) struggle to answer surprisingly simple money questions:

  • Can I actually afford this today?
  • When will I go overdrawn?
  • Will this debt ever end?
  • If I change one thing, what happens next?

Banking apps show balances. Budgeting apps record transactions. Very few explain the story behind the numbers.

I wanted something that felt like a friend who's good with money, sitting at your kitchen table — telling you the truth kindly and giving you a way out with real dates on it.

What it does

Personal CFO pairs a deterministic financial engine with GPT-5.6.

The app:

  • forecasts your balance and spots when you'll go overdrawn
  • models your regular income, spending and the surprise costs that hit most months
  • compares this month's spending against your own normal month
  • builds a recovery plan out of changes your own transaction history shows are realistic
  • works out debt payoff timelines
  • explains all of it in plain English

In the demo (a made-up household: two adults, three kids, £12,700 of debt), the app spots £200 a month still going into savings while a credit card charges 24.9% — and suggests giving that money a more urgent job for a while. With the full plan in place, a normal month stops running short, £92.46 a month is freed up, and the debt-free date moves forward seventeen months, saving around £645 in interest.

One rule guided the whole project:

Code calculates. GPT-5.6 interprets. The user decides.

The AI is never asked to do maths. Every figure comes from deterministic TypeScript code. GPT-5.6 only explains results that have already been calculated and checked.

How I built it

Built step by step with Codex over four evenings — definitely not a one-prompt build.

The stack: Next.js, React, TypeScript, SQLite (Drizzle), Recharts, and GPT-5.6 through the Responses API with structured outputs.

The deterministic engine does all the calculating: balance forecasts, matching up transfers, regular payments, comparing categories against a normal month, choosing the recovery plan, dating the milestones, and projecting the debts.

The part I find most interesting is the validation boundary between the engine and the AI. GPT-5.6 is handed a package of already-calculated facts, each with its own ID, and everything it writes has to point back to those facts. A validator then goes through the finished text: every amount and date must match a deterministic value (exact, or rounded to the whole pound), dates like "31 July" must line up with the real ones, and made-up figures or internal jargon get the whole response rejected. A rejected response is never shown — the app falls back to a plain, deterministic summary instead. Approved responses are cached, so the demo never depends on a live call working.

Codex sped everything up: the data model, the forecasting and debt engines, the validation layer, the charts, and 63 automated tests. It worked like a development partner — but the money judgement calls stayed with me, which mattered more than I expected (see below).

Challenges I ran into

Nearly every hard problem was about the numbers being honest — found by reading the output and refusing to accept it:

  • The grocery bug: the plan suggested cutting groceries by £417 a month. That turned out to be 20% of three months of shopping, treated as one month. I caught it by checking the plan against the spending comparisons.
  • One-off hole vs monthly leak: the demo household had two different problems — a one-off £1,348 hole they were already in, and a monthly leak of about £152 more going out than coming in. The engine mixed them together and demanded the plan find £1,803 every month, which is impossible on a £3,150 salary — so every milestone showed "no date possible." Separating them fixed it: the plan plugs the monthly leak first, then uses the £92.46 left over each month to fill the hole. That turned "no date possible" into real dates.
  • The plan with no meat: An early version explained the problem really well, then offered just £290 of actions against a £1,348 hole. All it could suggest was moving some savings and cutting £20 of spending. The AI wasn't allowed to invent solutions—and that's exactly how it should be—but I realised I hadn't taught the application how to build a recovery plan. Once I wrote that logic, it could add up realistic savings, recognise contradictions like saving while paying 24.9% credit-card interest, and hand the AI a complete plan to explain.
  • The voice: my own behind-the-scenes vocabulary ("backlog", "funded provision") kept leaking into the writing, so it read like an audit report. Fixing it took reframing the whole prompt — "you've just been through your friend's finances; close the laptop and tell them what you found" — plus a banned-words list. More tone instructions on their own didn't work.
  • Voice vs validator: the friendlier style ("about £690", "31 July") then clashed with a validator that wanted exact matches. I taught it to accept sensible rounding and natural dates — without ever loosening the rule that every figure must trace back to a deterministic calculation.

Accomplishments that I'm proud of

Finishing my first hackathon — with an app where the AI provably can't invent a financial figure. The moment the generated brief first said "this is a timing squeeze to contain, not a personal failure" — kind, specific, and every number in it traceable to the deterministic engine — was the product working exactly as I'd imagined. And 63 automated tests on a four-evening build.

What I learned

The biggest lesson wasn't about prompting — it was about where to put things. AI is brilliant at explaining; deterministic code is still the right place for calculations and business rules. Keeping those jobs separate made the app more trustworthy and easier to reason about.

Rigour and warmth aren't opposites. The maths has to be strict so the voice can be kind.

What's next for Personal CFO

Bank statement (CSV) import so I can use it with my own money, running on my own hardware at home behind a login. And because the validation boundary doesn't care which AI is behind it, eventually a fully local model — the whole CFO running at home, nothing leaving the house, and deterministic calculations still the source of truth.

All financial information in the demonstration uses fictional data created solely for demonstration purposes.

Built With

Share this project:

Updates