github securo-finance/securo v0.15.1

3 hours ago

In this release we rebuilt the dashboard's hero card around the balance you can actually spend, added a way to keep a transaction in your balance while leaving it out of reports, and gave the rules list the filters it was missing. Securo now speaks Japanese, Hindi and Greek. On the fixes side, a credit-card bill stopped dropping purchases that the reporting filter excludes, amount fields honour the number format you configured, and the rate limiter can tell clients apart when it sits behind a reverse proxy.

Features

  • The dashboard leads with available balance. The hero card answers "what can I spend" first and breaks the figure down per account, with net worth, the month's flow and the savings rate beside it instead of one total standing alone. Closes #691, by @vhsantos26 (#785) ๐ŸŽ‰
  • Keep a transaction out of reports without hiding it. A new toggle leaves the row in the ledger and in the account balance but drops it from income and expense figures, for a work expense put on a personal card or anything else that is not really your spending. By @gabbanaesteban (#675) ๐ŸŽ‰
  • The rules list filters. Search by name and narrow by category, status or action, so a long rule set stays workable. Closes #610, by @paulovitor6 (#672) ๐ŸŽ‰
  • Biweekly and twice-yearly recurrences. Both cadences are available wherever a recurring bill or an installment series is set up. Closes #597, by @seraphblade2010 (#685) ๐ŸŽ‰
  • The People table sorts and acts in bulk. Sort by name, type or transaction count with the choice remembered, filter to favourites, and select several people to merge or delete at once. By @joaolucenalima (#831) ๐ŸŽ‰
  • Passkeys are offered through autofill. The sign-in field surfaces a saved passkey the way a browser offers a saved password, instead of waiting for a button to be pressed. By @panga (#744) ๐ŸŽ‰
  • Assets accept external ids through the API, so an importer can keep its own reference on a holding and match it again later. By @panga (#755) ๐ŸŽ‰
  • Japanese. A full translation of the interface. Closes #836, by @hisamotodev (#835) ๐ŸŽ‰
  • Hindi. A full translation of the interface. Closes #825, by @shohaibmk (#827) ๐ŸŽ‰
  • Greek. A full translation of the interface, by @yianniscy84 (#791) ๐ŸŽ‰

Fixes

  • The rate limiter counted everyone behind a reverse proxy as one client. In the shipped Compose topology every request arrives from the bundled nginx, so a single visitor could exhaust the limit for all of them. Set TRUSTED_PROXY_HOPS to the number of proxies in front of the backend and the real client address is used instead. Closes #801, by @AmirF194 (#839) ๐ŸŽ‰
  • Amount fields ignored the number format setting. On a comma-decimal locale the transaction dialog still wrote and read amounts with a dot, so what you typed was not what you saw. Closes #767, by @shaynhornik (#798) ๐ŸŽ‰
  • A credit-card bill dropped purchases it should have billed. The cycle total reused the reporting filter, so an investment bought with the card vanished from the statement even though the bank charged for it. A bill honours "make this disappear" and ignores "report this differently" now (#815)
  • Rules could never override the category a sync provider had already set. The provider's guess won every time; your own rule wins now. Closes #730, by @vhsantos26 (#735) ๐ŸŽ‰
  • A category drill-down could not be reconciled with its own list. Settled, pending and projected amounts are broken out under the total instead of being folded into one figure that matched none of them. Closes #715, by @vhsantos26 (#716) ๐ŸŽ‰, with a follow-up so a projected row stays inside the total it is listed under (#853)
  • CSV import gave up on a whole file over one bad row. Rows whose date or amount cannot be read are skipped and reported with their line number and the reason, and a row with a missing cell no longer fails the import. Closes #566, by @jorishaenseler15 (#576) ๐ŸŽ‰
  • Manual and sold holdings showed no return. Profit is reported in currency and percent for holdings you price yourself and for positions you have already closed. By @arturschaefer (#806) ๐ŸŽ‰
  • The bundled nginx only resolved the backend on Docker. The resolver is read from the platform at startup, so the same image proxies correctly on Podman, Kubernetes and Railway, and NGINX_RESOLVER still overrides it. By @jrvidotti (#696) ๐ŸŽ‰
  • A storage key could escape its directory when a sibling path shared its prefix, and reading the project version now falls back cleanly where tomllib is unavailable. By @vjymisal0 (#784) ๐ŸŽ‰

Under the hood

Migration 085 runs automatically on upgrade, adding the column behind report exclusion ยท react-is is declared as a direct dependency so a stricter package manager installs it, by @jfrcom (#809) ๐ŸŽ‰ ยท the invoice tests no longer depend on the wall clock, which had turned the whole module red on a date that has nothing to do with invoices (#852) ยท the downloads badge drops its decimal once the count outgrows it (#818) ยท uv moved to 0.12.7 (#769) and the backend dependencies were refreshed (#770)

Thanks @vhsantos26, @panga, @gabbanaesteban, @paulovitor6, @seraphblade2010, @joaolucenalima, @hisamotodev, @shohaibmk, @yianniscy84, @AmirF194, @shaynhornik, @jorishaenseler15, @arturschaefer, @jrvidotti, @vjymisal0 and @jfrcom for the code and the reviews, and @brun04maral, @gh2137 and @axxml for the reports ๐Ÿ’œ

Full Changelog: v0.15.0...v0.15.1

Don't miss a new securo release

NewReleases is sending notifications on new releases.