Fava is gorgeous. Seriously—when I first discovered it after years of spreadsheet hell, I felt like I’d found financial tracking nirvana. The charts, the filtering, the clean transaction views… it’s everything you need for personal finance tracking.
Until it isn’t.
The Day a Client Asked for Something Fava Couldn’t Do
I run a side consulting business helping FIRE-focused professionals optimize their path to early retirement. Last month, a client asked for a dashboard that Fava simply can’t provide out-of-the-box:
Requirements that broke Fava:
- Net worth trajectory with multiple scenarios: Side-by-side comparison of CoastFIRE (stop saving, let it grow), LeanFIRE ($30K/year expenses), and FatFIRE ($100K/year) paths
- Tax-optimized withdrawal sequence visualization: Which accounts to tap first (taxable → Roth conversions → traditional IRA) with projected tax brackets over 30 years
- Geographic arbitrage calculator: Living cost comparison between Seattle, Portugal, and Thailand with currency-adjusted purchasing power
Fava gives me beautiful historical data. But it’s not built for forward-looking scenario modeling with custom business logic.
The Plain Text Accounting Advantage Nobody Talks About
Here’s what I realized: Beancount isn’t just an accounting tool—it’s a single source of truth that ANY visualization layer can consume.
With QuickBooks or Xero, you’re locked into their UI. If their dashboard doesn’t show what you need, you’re out of luck (or paying $$$$ for their “advanced analytics tier”).
With Beancount plain text:
- Fava reads it and gives me gorgeous standard dashboards
- My custom Python scripts read the SAME ledger for specialized analysis
- Future tools (maybe GPT-7 in 2027?) can read it too
- The data layer never changes—only the presentation layers evolve
My Technical Stack for Custom FIRE Dashboards
Tools I use:
- bean-query for data extraction:
bean-query ledger.beancount "SELECT account, sum(position) WHERE account ~ 'Assets:' GROUP BY account" - Pandas for data manipulation: Time-series projections, scenario modeling, currency conversions
- Plotly for interactive charts: Clients can hover, zoom, toggle scenarios on/off
- Jupyter notebooks as “living dashboards”: Update the ledger, re-run cells, charts refresh automatically
Example workflow:
- Morning: Add transactions in Beancount plain text (or use Fava for quick entry)
- Client check-in: Open Jupyter notebook, run all cells → fresh dashboard with today’s data
- Client sees: “You’re 67% to CoastFIRE, need $43K more before you can stop contributing”
The notebook lives in Git alongside the ledger. Every calculation is documented and version-controlled.
The Honest Trade-Off: Maintenance Burden
Here’s what I tell people who ask if they should build custom dashboards:
Fava is maintained by a community. When Beancount updates, Fava gets fixed. When browsers change, Fava adapts. You do nothing.
Custom code is YOUR problem. Plotly releases breaking changes? You fix it. Client wants new KPIs? You code it. Notebook breaks on Python 3.13? You debug it.
When is custom worth it?
- You have repeated use cases (10+ FIRE clients = custom dashboard pays for itself)
- Clients pay a premium for specialized insights (I charge 30% more for “FIRE Planning Plus”)
- The gap between client needs and Fava’s features is genuinely large (not just “I want the bar chart in a different color”)
When Fava is enough:
- Standard income/expense tracking (90% of use cases)
- Net worth monitoring (built-in charts are beautiful)
- Budget vs. actual comparisons (Fava does this well)
The Future: Fava for Clients, Custom for Insights
My current approach: Two interfaces, one truth.
- Client-facing: I give clients Fava access to see their transactions and standard reports (they love it—feels professional)
- Analysis layer: My custom Jupyter dashboards for FIRE scenario modeling, tax optimization, withdrawal strategies
Both read the exact same ledger.beancount file. I never duplicate data. The plain text is the source of truth, and I can build whatever presentation layer serves the current need.
What About Fava-Dashboards Extension?
Fair question—I should mention fava-dashboards which lets you build custom dashboards INSIDE Fava using Apache ECharts. For many custom visualization needs, this is the sweet spot: more flexibility than default Fava, less maintenance than fully custom code.
I use it for simpler custom charts. But when I need programmatic scenario modeling (running Monte Carlo simulations on retirement success rates), I drop to Python.
Share Your Custom Dashboard Stories
Anyone else building custom visualization layers on top of Beancount? I’d love to hear:
- What tools are you using? (D3.js? Tableau? PowerBI exports?)
- What use cases pushed you beyond Fava?
- How do you handle maintenance and version control?
- Any regrets or “I should’ve just stuck with Fava” stories?
The beauty of plain text accounting is infinite flexibility. But with great power comes great… maintenance responsibility. ![]()
My stack: Beancount 2.3.6, Fava 1.28, Python 3.12, Jupyter, Plotly, pandas
Clients: 12 active FIRE planning clients, $2.1M average portfolio size
Custom dashboard ROI: ~40 hours to build, saves ~2 hours per client meeting (pays for itself after 5-6 client sessions)