Skip to content

v0.18.1 – Spanish locale & self-hosting polish

Choose a tag to compare

@letehaha letehaha released this 08 Jun 07:54
a2ec23d

What's Changed

🌐 Spanish locale & in-app update banner

MoneyMatter now ships with a full Spanish (es) translation – pick it from Preferences → Language.

The app also detects when a new version has been deployed and surfaces an in-app banner so you can reload into the latest build without leaving the page. No more stale UI after a release goes out.

📊 Subs & Bills widget: % of average income

The Subs & Bills widget now shows your recurring spend as a percentage of your average income, color-coded green / yellow / red against per-type thresholds, so you can see at a glance whether subscriptions are quietly eating your paycheck. The All / Subs / Bills filter and the income-window setting moved out of layout-editing mode into the widget's gear-icon popover, so they're reachable without entering edit mode.

📈 Investments improvements

  • Search securities by ISIN: looking up a security by its ISIN (e.g. IE00B53L3W79) now returns the right ticker from Yahoo instead of zero results, and duplicate hits across providers are deduped. Reported by @yonicsurny in #324, fixed by @letehaha.
  • Closed positions and new-holding flow: smoother ergonomics around adding a new holding and a cleaner presentation of already-closed positions in the holdings table.

🏠 Self-hosting reliability

A bundle of fixes for users running their own MoneyMatter instance:

  • Fresh deploys no longer fail on sign-up / sign-in – the configured AUTH_ORIGIN is now seeded into the Express CORS allow-list, and localhost is auto-allowed in dev with sharper network error messages. Reported by @yonicsurny in #319, fixed by @letehaha.
  • Subscription logos stop 401-ing when VITE_LOGO_DEV_TOKEN is unset – the frontend skips the logo.dev request entirely instead of attempting an unauthenticated call. Reported by @yonicsurny in #322, fixed by @letehaha.
  • Crypto security search now surfaces a clear hint when COINGECKO_API_KEY is missing instead of silently returning empty results. Reported by @yonicsurny in #320, fixed by @letehaha.
  • AI API key validation stops failing on Anthropic for users on the now-retired claude-3-5-haiku-latest model – retired models are dropped from the picker and existing user settings are silently upgraded to a supported replacement. Reported by @yonicsurny in #317, fixed by @letehaha.
  • The .env.template is corrected and env-variable presence checks are tightened end-to-end via a new isEnvConfigured util, so misconfigurations fail loudly instead of at runtime in unexpected places.

Huge thanks to @yonicsurny for the thorough self-hosting reports and improvement suggestions across this release.

🏦 Bank & crypto sync improvements

  • Enable Banking initial sync now auto-shrinks the lookback window when a bank caps it below the 3-year default (e.g. BNP Paribas Fortis BE), so the first sync stops failing on those banks. Reported by @yonicsurny in #318, fixed by @letehaha.
  • Crypto prices refresh every 15 minutes by default (was hourly), so portfolio values track market moves much faster.
  • Bank providers were unified around a single Balances-table update path with a (date, accountId) unique index, closing a write race that occasionally produced duplicate balance rows. Sync becomes noticeably more reliable across Monobank, Enable Banking, and SimpleFIN.
  • Monobank picks the newest transaction by createdAt when source timestamps collide, so near-simultaneous transactions no longer trip up sync ordering.

🐛 Bug Fixes

  • Unlinking a transfer during transaction creation (before the transaction itself exists) no longer crashes the form.
  • Locales load correctly on first paint after a deploy instead of falling back to English for a flash.
  • The payee chunk loads when the payee dialog mounts outside the Payees route, so inline payee selectors work on the transactions list and bulk-edit screens.
  • Vehicle client form no longer rejects valid input on validation.
  • EnableBanking transient timeouts now retry, and Sentry no longer reports the same captured error twice.
  • Investments paywall (HTTP 402) errors from upstream providers no longer create Sentry noise – they're expected upgrade prompts, not bugs.
  • Assorted Sentry-reported edge cases around username generation collisions and payee extraction caps now log at the right severity instead of paging on noise.

📝 Code Changes

  • feat: Add app version reload to catch new releases by @letehaha in #329
  • feat(investments): fix ISIN search, dedup securities across providers (+ closed-holding flow) by @letehaha in #327
  • feat(i18n): add Spanish (es) locale by @letehaha in #315
  • feat(crons): speedup crypto price sync interval (default 15m) by @letehaha in #314
  • feat(widgets): show % of avg income, settings popover by @letehaha in #313
  • fix(transfers): prevent crash unlinking transfer in form creation mode by @letehaha in #330
  • fix(i18n): load payee chunk when dialog mounts outside payees route by @letehaha in #328
  • fix(enable-banking): shrink initial-sync lookback when bank caps it by @letehaha in #326
  • fix(self-host): bundle of self-hosting setup fixes (CORS, logo.dev, crypto provider, AI models, env checks) by @letehaha in #325
  • refactor(bank-providers): unify Balances table update + sync-status; close (accountId, date) race by @letehaha in #321
  • fix: Sentry-reported issues by @letehaha in #316

Full Changelog: v0.18.0...v0.18.1