v0.16.2 – CSV investment imports & holdings improvements
What's Changed
📊 Direct CSV import for investment transactions
MoneyMatter now ships a dedicated CSV import flow for investment portfolios alongside the existing AI-powered statement extractor. Drop a plain CSV in the upload step, map your columns to MoneyMatter's transaction fields, and the importer parses, groups by holding, and previews everything before anything touches your portfolio.
Because parsing happens locally and deterministically, the new flow handles much larger files than the AI extractor and gives you full control over column mapping — useful for broker exports that don't match the shapes the AI was trained on. Mobile users get a polished mapping step with submit-time validation, so importing on a phone is no longer a layout fight.
🗂️ Holdings management — force-delete & infinite scroll
Holdings can now be wiped out in a single click instead of requiring you to remove every transaction by hand. When you force-delete a holding, MoneyMatter automatically recalculates the portfolio's cash balance so totals stay consistent.
The transactions list inside a holding now infinite-scrolls with virtualized rendering, so portfolios with hundreds or thousands of transactions stay snappy instead of paginating or stalling on render.
✨ Smaller UX wins
- New tooltips on portfolio actions explain what each button does on hover.
- The Add transaction form now exposes more investment transaction categories so you can record a wider range of corporate actions and adjustments without workarounds.
- Investment-import warnings and inline alerts across the app now use a consistent visual style.
🐛 Bug Fixes
- Large portfolio CSV imports no longer crash. The backend now accepts bigger request bodies, and the frontend handles non-JSON error responses cleanly instead of throwing a
SyntaxErrorand silently retrying three times. - Yahoo-style statement imports no longer drop rows or inflate cost basis — every row in your statement now lands in the portfolio with the correct cost basis.
- The delete action on holding transactions is clickable again after a regression made the button unresponsive.
- Portfolios can now share names across the same user account; the spurious "duplicate name" error is gone.
- Cash balance recalculates correctly when a holding is deleted, so portfolio cash no longer drifts after cleanup.
📝 Code Changes
- feat: Investments transactions import via CSV by @letehaha in #282
- feat: Fix various issues with UX and deps by @letehaha in #281
- fix: Yahoo-style investment import: stop dropping rows + stop inflating cost basis by @letehaha in #280
- feat: Improve portfolio management by @letehaha in #278
- fix: handle large portfolio imports and non-JSON API errors by @letehaha in #277
Full Changelog: v0.16.1...v0.16.2