What's Changed
💼 Private venture investment tracking
MoneyMatter now has a dedicated module for tracking private/illiquid investments — SPV deals, syndicates, angel rounds, and anything else that doesn't live on a public exchange. Each deal supports a 7-event lifecycle (init, capital call, distribution, exit, NAV update, writedown, fee payment) with European/American carry math built in, so you can model real GP/LP economics instead of hand-rolling spreadsheets.
The module computes TVPI, DPI, and IRR per deal, enforces event chronology and dependency rules (e.g. no distribution before a capital call), and lets you link existing transactions to specific events so cash flows reconcile cleanly. Ventures show up alongside accounts and portfolios in the sidebar and are factored into the Balance Trend chart, so net worth stays complete across liquid and illiquid holdings. The entire venture module is also exposed via MCP, so you can create deals, log events, and inspect metrics through Claude or any other AI agent.
📈 Smarter investments UI
- Calculator can now use your portfolios' own returns. A new market-indicator option pulls each enabled portfolio's actual time-weighted annualized return so projections are seeded from real tracked performance instead of preset benchmarks. TWR is used rather than XIRR because the calculator already models contributions separately.
- Closed positions collapsed in holdings. Zero-quantity holdings now sit under an expandable "Closed positions" section instead of cluttering the active list. The default view shows only what you currently hold, with closed positions one click away when you want to review historical exits.
🧭 Navigation polish
- Sidebar remembers state. Collapsed/expanded sections and account-group toggles now persist across sessions, so MoneyMatter opens exactly the way you left it instead of resetting on every reload.
- Proper 404 page. Unknown routes now land on a real not-found page instead of a blank/silent fallback.
⚡ Performance & efficiency
- Lighter accounts response.
GET /accountsandGET /account-groupsno longer carry the JSONBexternalDatablob (bank raw data, IBAN, internal routing metadata). The frontend never read it and it dominated payload size — account loads are noticeably lighter, especially for users with many connected banks. - Per-token Monobank sync queues. Monobank's rate limit is per-token, so syncs now run on isolated queues keyed by API token instead of a single shared queue. Users with multiple Monobank tokens no longer slow each other's syncs down.
- Leaner MCP responses. AI-facing read tools now return slimmed-down payloads with only AI-relevant fields, dropping bank-sync metadata, externalData blobs, ACL/share context, provider routing keys, embedded currency models, matching-rule config, audit timestamps, and redundant ids. AI conversations about your finances are now significantly cheaper and faster.
🐛 Bug Fixes
get_budget_spending_statsnow returns amounts as decimals instead of cents, matching the REST endpoint and the rest of the money convention.- Legacy Yahoo-imported crypto rows no longer get routed to CoinGecko on price refresh — historical crypto positions imported from Yahoo statements now refresh correctly.
- AlphaVantage requests now use the
compactoutputsize for recent date ranges, avoiding unnecessary full-history fetches on short-window queries. - The hourly crypto price sync no longer fails intermittently due to a recovered provider failure being routed to Sentry; transient provider hiccups are now treated as the non-events they are.
- Combined balance history now uses the correct FX direction for portfolio data, so multi-currency balance trends stop skewing.
- Enable Banking's `deleteSession` call now treats a `CLOSED_SESSION` response as success instead of an error, removing a spurious failure when cleaning up already-expired sessions.
📝 Code Changes
- feat: persist sidebar settings state by @letehaha in #296
- perf: Isolate Monobank sync queues per API token by @letehaha in #295
- perf: Strip useless payload from accounts response by @letehaha in #294
- feat: Investment calculator based on holdings by @letehaha in #293
- feat: Collapse closed positions in holdings table by @letehaha in #292
- feat: Venture investments tracking by @letehaha in #291
- fix: Sentry issues by @letehaha in #290
- perf(mcp): slim MCP read-tool responses to AI-relevant fields by @letehaha in #289
- fix: Sentry issues by @letehaha in #288
Full Changelog: v0.16.3...v0.16.4