Home · Builds · Finance ETL · Part 6

Finance ETL · Part 6 of 8

Dashboards as code, and balances as dates.

Metabase reads through the read-only role. The dashboards are created by SQL files that delete and recreate themselves. On top sits the FIRE layer: a single assumptions row and a stack of views that turn balances into a retirement date.

Scratch cut · 1:26 Screen recording with demo data. Spend by category, account balances, budget versus actual, then the FIRE status card, the projection, and the sensitivity table. Demo data, scratch voice, real pipeline. The live recording takes over once it is shot.

Connect and query

One data source in Metabase, pointed at the brosnan_growth database as metabase_reader. The first three cards are plain SQL: spend by category this month, account balances, budget versus actual.

Dashboards defined in SQL

Metabase stores its dashboards in its own Postgres database. Two SQL files insert the FIRE and Action Center dashboards, their cards, and their layouts directly, deleting any prior run first inside one transaction. Editing a dashboard means editing a file and re-applying it.

The FIRE layer

FIRE number  = lean_annual_spend / swr
Coast number = FIRE number / (1 + real_return) ^ years_to_retirement
Dashboards rise out of a SQL file. The gauge beside them is the FIRE status.
Audio · 3 minReal returns, today's dollars, and why the number is smaller than you think
Scratch narration Inflation-adjusted assumptions and how the sensitivity table changed a household decision.
The FIRE number and Coast number formulas on a card, with the settings row listed beneath.
Plate VI · Seeing it
Free to borrow for your feed · Wide edition

Where you are: a retirement date that updates every hour. Next, the numbers start telling you what to do.

Previous · The hourly loopNext · Part 7 of 8Acting on it: the bot joins the family chat

Write to me

Do you know your runway as a date?

Fractional CTO and CFO engagements start with a short call. No deck required, no pitch either. Bring the number you do not trust.

Tell me what is stuck