Replaces the old KPI/chart dashboard with a focused layout that
answers the three key questions immediately:
- Hero block: "Available to spend" = income − fixed costs − spent so far,
with a progress bar showing % of disposable used vs month elapsed
- Bank math panel: detects recurring fixed expenses (Housing, Utilities,
Subscriptions, Investments) from last 3 months and shows the minimum
bank balance needed right now including a 2-week safety buffer
- Savings rate card with month-over-month delta
- Portfolio snapshot card with total value and P&L
- Stocks at a glance panel: per-holding value and P&L inline
- Budget health: thin bars per category, red when over limit
- Recent activity: last 5 transactions with category color dots
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Portfolio:
- fetchPrices was passing ISINs directly to Yahoo Finance, which only
accepts ticker symbols (e.g. VWCE.DE, not IE00B3RBWM25). Added a
hardcoded isinToTicker map covering common European ETFs (Vanguard,
iShares, Xtrackers, Amundi). fetchPricesByISIN now resolves each ISIN
to its ticker before calling Yahoo and keys the result by ISIN so
computeHoldings can look up prices correctly. Renamed holdingsByISIN
to uniqueISINs to reflect what it actually returns.
Projections:
- Template had a missing <tr> and a broken pace-bar width expression
that mixed float64/int64 in the div template function, causing a
template execution error that rendered the page blank. Moved all
math server-side: the handler now pre-computes []catProjection with
MonthlyAvg, AnnualTotal, and PacePct already calculated. Template
is now simple range + printf. Chart switched to horizontal bar for
better readability of long category names.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix sortStrings no-op bug that caused balance trend chart to display in random date order
- Fix reports table referencing wrong scope for row totals ($.Totals → .Totals per row)
- Add income vs expense split cards on dashboard alongside net figure
- Add budget progress bars on dashboard using existing category budget_cents data
- Color-coded category badges throughout using each category's configured color
- Replace window.prompt() category editor in transactions with inline dropdown
- Replace window.prompt() budget editor in categories with inline input field
- Add manual transaction entry modal (POST /api/transactions) so users don't need CSV for every entry
- Show account names instead of raw MongoDB IDs in the transaction list
- Add clampPct and isOver template helpers for budget bar rendering
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>