v0.16.3 – Security logos, sidebar consolidation & investment polish
What's Changed
🪙 Security logos in holdings, search, and import
MoneyMatter now shows the actual logo for every security across the investment UI — inside the holdings table, in the security picker when adding a transaction, and in the import preview. Stocks pull from existing market-data providers, and crypto holdings fall back to logo.dev when CoinGecko doesn't supply an image, so coins like long-tail altcoins no longer show a blank placeholder.
The result is a much faster visual scan of a portfolio: you can recognize positions by their icon instead of reading every ticker.
🗂️ Unified sidebar for accounts and portfolios
The sidebar now consolidates regular accounts and investment portfolios into a single list with sticky section headers. Long lists scroll smoothly while the headers stay pinned, so you always know which section you're in without losing your place.
🪙 Hourly crypto pricing with intraday updates
Crypto holdings now refresh on an hourly cadence with intraday price snapshots instead of waiting for a once-a-day sync. Your portfolio's market value, P&L, and balance history reflect crypto moves the same day they happen.
📝 Notes on investment transactions
You can now attach a free-form note when creating an investment transaction — useful for recording the reasoning behind a trade, a corporate-action detail, or any context you want to keep with the transaction itself.
🐛 Bug Fixes
- Portfolio balance history now handles mid-history oversells correctly: short-aware quantity and cost-basis math mirror the live holding recalculation, so a holding no longer disappears mid-chart and reinflate on the next buy. FX conversion of market value now uses the security's native currency instead of the transaction's currency, fixing skewed historical values for multi-currency portfolios.
- Crypto quantity now displays up to 5 decimals in the transaction list, so small fractional positions are no longer rounded down to a misleading value.
- Removed a race condition in the backend cache that could occasionally serve stale or inconsistent data when multiple requests hit the same cache key at once.
📝 Code Changes
- fix: Fix portfolio balance history calculation by @letehaha in #287
- feat(investments): show security logos in holdings, search, and import by @letehaha in #286
- fix: Remove racy CacheClient.setCacheKey state by @letehaha in #285
- feat(fe): consolidate sidebar accounts + portfolios with sticky sections by @letehaha in #284
- feat: Investments transactions improvements by @letehaha in #283
Full Changelog: v0.16.2...v0.16.3