whisper-money/CHANGELOG.md

121 KiB

Changelog

0.2.6 (2026-07-06)

Bug Fixes

  • accounts: fire drag haptic on first tap, not after dragging (#576) (c75e834)
  • accounts: remove double-skeleton flash on account show (#634) (afa80b6), closes #632
  • accounts: stop second long-press haptic on drag handle (#578) (5db6cdc), closes #576
  • address remaining security audit findings (round 2) (#628) (4fdb7ee), closes #623
  • ai: handle transient AI provider overloads — stop the Sentry noise and retry the dropped work (#595) (4038e60)
  • ai: surface learned-rule toast in edit modal and guard weak description keys (#635) (c159e87)
  • analysis: respect category types like the cashflow screen (#612) (986f437)
  • appearance: support MediaQueryList change events on legacy Safari (PHP-LARAVEL-41) (#646) (465eb38)
  • banking: handle EnableBanking expired sessions as reconnect, not error (#557) (c36df98)
  • banking: keep the native green Wise logo, not the aggregator's (#590) (578a9b4), closes #589 #525 #589
  • banking: only log sync failures once the connection gives up (#603) (8bbff05)
  • banking: skip inaccessible EnableBanking accounts instead of failing the connection (#559) (4656870)
  • banking: stop Wise appearing multiple times in the connect list (#589) (ed5aac0)
  • charts: improve contrast for chart colors 9-10 (#614) (a37481f), closes hi#index
  • discord: show old → new plan on plan change notification (#637) (3972007)
  • discord: skip zero-amount payment stats messages (#540) (7693e48)
  • i18n: keep Discord brand name untranslated in French (#541) (06effb5)
  • integration-requests: freeze votes on not-doable requests (#555) (89c1ab1)
  • open-banking: only block re-adding a bank when a live connection exists (#569) (14c4598)
  • open-banking: stop storing the XXX no-currency placeholder on accounts (#602) (bc57eae)
  • queue: add supervisor worker for the ai queue (#546) (f191d74)
  • queue: raise retry_after above the longest job timeout (PHP-LARAVEL-2D) (#645) (05d4bae)
  • security: scope job-status endpoints to owner + feature-area fixes (#627) (d55c3f4), closes #4 #1
  • sentry: drop browser-extension noise before sending events (#568) (52708f9)
  • settings: vertically center rows in automation rules and labels tables (#615) (e631cbb)
  • skip demo reset when demo account is disabled (#626) (eb31455)
  • stop double-dispatching transaction listeners (N+1 insert into jobs) (#620) (0f8eca5)
  • transactions: let date column size to its content (#610) (5ef3e01)
  • transactions: only auto-select account on account pages (#549) (9a20335)
  • transactions: pad Category column when Date column is hidden (#584) (d2806b5), closes #583 #582
  • transactions: pad Category column when Date column is hidden (#585) (8e38713), closes 582/#583
  • transactions: restore left padding when category is first column (#582) (d11aa2d)
  • ui: make input borders visible in dark mode (#571) (83a5e96)
  • worktree: remove double slash in storage/keys copy path (#629) (4615d7a)

Features

  • accounts: reorder accounts with drag-and-drop (#575) (cd3080e)
  • add Wise open banking integration with balance sync (#525) (1c5a76a)
  • ai: dismissable AI consent banner that stops after the first decision (#617) (7e36bba)
  • ai: learn from category corrections so the AI stops repeating the same mistake (#608) (6727a9c)
  • ai: manage AI consent outside onboarding with live backfill (#591) (9a458b1)
  • ai: persist AI categorization suggestions below the label bar (#547) (9328cd3)
  • ai: record the model behind each AI categorization (#594) (291cfbe)
  • banking: add Interactive Brokers sync via Flex Web Service (#581) (f60e6d7)
  • banking: enable Interactive Brokers for all users (#593) (094ff4d)
  • banking: let Wise credentials be updated (#588) (619ed0f), closes #581
  • connections: create a new account from the manage-accounts selector (#560) (6cb8d11)
  • connections: manage which accounts a bank connection syncs (#558) (a9b90a2)
  • currencies: add Nigerian Naira (NGN) (#642) (6ff7edf)
  • currency: add GHS (Ghanaian Cedi) (#644) (2aebe45), closes #567
  • currency: add RSD (Serbian Dinar) (#567) (934e16c)
  • dashboard: add accounts manager dialog with visibility toggle and reorder (#604) (777dfc0)
  • demo: gate demo account access behind a config flag (#580) (a346566)
  • drip: email users stuck on the paywall a day after onboarding (#562) (ce6bfc9)
  • email: follow up after post-onboarding AI consent (#596) (934d834)
  • encryption: commands to warn and remove inactive encrypted-data accounts (#633) (477e4d5)
  • features: support percentage rollouts in feature:enable (#592) (f72e2a6)
  • i18n: add French translation support (#532) (a38ed69)
  • integration-requests: add done status and fix review command crash on orphaned author (#601) (e4be39b)
  • integration-requests: add not-doable status with a public comment (#552) (801f6c7)
  • integration-requests: community board to request & vote bank integrations (#550) (5e8f227)
  • integration-requests: let the admin bypass limits and auto-approve (#551) (7e9122e)
  • integration-requests: markdown comments and in-progress status (#553) (da88adb)
  • integration-requests: multi-vote, per-plan quota and undo (#554) (0ea54fa)
  • landing: clarify AI framing and add testimonials (#613) (d55e15b)
  • onboarding: auto-enable AI for connected banks, ask the rest (#618) (10442c1)
  • onboarding: clarify the "categorize at least 5" goal in the categorizer (#616) (af64f56)
  • open-banking: allow re-connecting a bank behind a replace warning (#570) (64827fa), closes #569
  • open-banking: disable already-connected banks in the connect picker (#556) (6e6433c)
  • open-banking: enable manage bank accounts for everyone (#572) (0f3cdd4)
  • paywall: require a plan when the user has accepted AI (#564) (29d13ce)
  • stats: add --no-discord flag to stats:experiment-funnel (#606) (1db2871)
  • stats: add --no-discord to the remaining report commands (#607) (300756e)
  • stats: add weekly subscription funnel report (#599) (756b481)
  • stats: weekly paywall stuck-cohort report to Discord (#563) (57f8c93)
  • subscriptions: reframe pay_now paywall copy around try-and-refund (#605) (09d6e8e)
  • subscriptions: trial/pricing A/B/C experiment (#600) (e5350ff)
  • support: add support link with community-first help modal (#542) (4a891a5)
  • transactions: default balance toggle on and apply it server-side (#566) (b76a0de)
  • transactions: highlight new transactions since last visit (#609) (884038c)
  • transactions: make new-transaction marker cross-device (#611) (ee69c51), closes #609
  • transactions: refine new transaction form layout and balance toggle (#597) (d6ec983)
  • transactions: release transaction analysis to all users (#579) (ae6f869)
  • transactions: reorder filters and switch accounts to a logo dropdown (#598) (d7bc4e6)
  • transactions: serve import dedup and account ledger from the backend (#631) (021cb66)
  • welcome: add Francisco Montes testimonial (#636) (02087ab)
  • welcome: add Haru testimonial with Discord avatar (#577) (b0e74fa)

Performance Improvements

  • accounts: defer the account ledger prop on show (#632) (9326d8f), closes #631 #631 #631
  • ai: reduce N+1 in bulk category updates (PHP-LARAVEL-40, partial) (#624) (3d3f6da), closes #2
  • banking: kill per-transaction dedup N+1 in bank sync (PHP-LARAVEL-3Y) (#621) (84bad76)
  • db: index transactions for the daily synced-email slow query (PHP-LARAVEL-3X) (#622) (ad46e46)

0.2.5 (2026-06-15)

Bug Fixes

Features

0.2.4 (2026-06-01)

Bug Fixes

  • accounts: sync currency from first account (#430) (0d4c683)
  • accounts: translate update button in edit account modal (#455) (65175e1)
  • automation: avoid rule preview n+1 (#431) (fd67cf7)
  • automation: avoid skipping rule matches (#433) (9772cfc)
  • banking: handle balance-fetch timeouts and silence handled retries (#450) (64b78e3)
  • batch automation rule application (#435) (606093d)
  • budgets: explain locked edit fields (#437) (235911b)
  • cashflow: clarify period comparisons (#436) (0250fdc)
  • cashflow: defer period label translation (#427) (1278a2b)
  • cashflow: stack mobile header controls (#426) (949ca11)
  • categories: allow recreate after delete (#444) (2fa822e)
  • categories: expose cashflow setting on create (#448) (5119528)
  • chart: mask stacked bar edges (#439) (d5d262e)
  • currency: degrade gracefully when rates return 404 (#449) (bef657c)
  • filter Safari cashback extension errors (#447) (0b94067)
  • import: correct balance for same-day, zero and negative values (#456) (144d919)
  • logging: keep laravel.log writable across container UIDs (#451) (741dc49)
  • move community link to user menu (#442) (4f46ae3)
  • net category refunds in cashflow (#441) (6caadad)
  • register: don't block signup on unrecognized browser timezone (#462) (96ee311)

Features

  • accounts: add transaction action (#438) (534a147)
  • accounts: show 50 transactions per page and link to full list (#459) (85ea3cc)
  • add BRL currency support (#453) (4dec0ab)
  • add Discord admin feed for daily stats and Stripe events (#458) (0b528b7), closes #457
  • add PKR currency support (#443) (cfa61fd)
  • add Stripe subscription stats command (#457) (670a0a6)
  • budgets: track multiple categories and labels per budget (#466) (71dd6e2)
  • cashflow: add savings and period views (#424) (ed737db)
  • cashflow: rework summary cards into net + saved/invested (#465) (5ce439f)
  • categorize: show debtor and creditor names (#454) (05ee8dc)
  • currency: add Saudi Riyal (SAR) (#461) (a71626a)
  • discord: enrich Stripe event messages and dedupe deliveries (#460) (f9bf0ea)
  • landing: redirect signed-in users (#429) (4f42de7)
  • leads: add user lead re-invite campaign (#432) (7b03d7c)
  • leads: schedule invitation emails (#434) (d5d22b9)
  • posthog: route analytics through reverse proxy (#463) (448bb2e)
  • transactions: add counterparty fields (#440) (10da06e)

0.2.3 (2026-05-25)

Bug Fixes

Features

0.2.2 (2026-05-22)

Bug Fixes

  • banking: dedup EnableBanking transactions by deterministic fingerprint (#390) (d9204bb)
  • banking: treat Indexa Capital performance 404 as empty data (#386) (06e7eed)
  • budget: show today marker (#411) (933dfde)
  • connections: show expired reconnect (#407) (d2e00f1)
  • keep lead invite command aliases (#406) (11f989d)
  • notifications: skip mail dispatch when recipient email is invalid (#387) (d140b4f)
  • sentry: ignore postMessage clone noise (#373) (6335287)

Features

0.2.1 (2026-05-12)

Features

Bug Fixes

  • Fix exchange rate cache race (PHP-LARAVEL-1V) (#383) (c3dcbb4)
  • Fix cashflow null category rows (#382) (30cc4da)
  • Fix browser translation crash (PHP-LARAVEL-1S) (#381) (e635fda)
  • Fix cashflow multi-currency totals (#380) (4e03996)
  • Fix service worker registration rejection (#376) (3526e5f)
  • Recover from stale Vite chunks (#374) (69610c5)
  • sentry: ignore postMessage clone noise (#373) (6335287)
  • Fix Sentry transaction and dashboard crashes (#372) (718cfa9)
  • Fix Sentry release commit detection in image build (#371) (f4ab4a1)
  • Prevent cached cashflow analytics responses (#368) (97df059)
  • Fix duplicate category name validation (#364) (e3c2d2f)

Chores

0.2.0 (2026-05-07)

Bug Fixes

  • banking: clamp linkedDateFrom to today on EnableBanking sync (#343) (f6c2057)
  • budgets: remove Custom period type to fix duplicate-key crash (#355) (22043ce)
  • dashboard: avoid month overflow in real estate projection (#340) (8f42496)
  • include production Dockerfile in deploy filter (#350) (21b5692)
  • onboarding: guard window access in SSR (#351) (b1709b7)
  • real-estate: compound annual revaluation monthly (#337) (13f741a)
  • unblock onboarding after sync failure (#346) (70f3897)

Features

  • accounts: show projection on real estate chart (#338) (0f2300b)
  • banking: back off scheduler when EnableBanking returns 429 (#352) (f800847)
  • leads: cohort-based launch invitations with per-user Stripe coupons (#333) (ab3d6e9)

Performance Improvements

  • resend: default sync-leads to last 24h window (#354) (e387c03)

0.1.20 (2026-04-24)

Bug Fixes

  • accounts: use chart color scheme for real estate sparkline and balance charts (#247) (8b71115)
  • add missing port to frontend Bugsink DSN (#260) (6ce5b12)
  • align onboarding account types with current asset support (#273) (80274e0)
  • auth: allow forced registration (#307) (75736f3)
  • avoid iOS PWA status bar overlap (#281) (80b6668)
  • banking: retry failed sync connections and log every sync attempt (#251) (f3b5929)
  • batch Pennant feature flag queries to avoid N+1 selects (#244) (8ac6ed4), closes #241
  • budgets: make budget assignment idempotent (#303) (b1ceda6)
  • budgets: retry assignment deadlocks (#304) (45e311e)
  • cashflow: exclude transfer categories from sankey (#235) (debb47f)
  • cashflow: net transfer categories in sankey (#257) (83f7e83)
  • cashflow: read period from server props instead of window (#302) (22952c4)
  • chart: hide tooltip on scroll with opacity fade (#320) (38e1976)
  • chart: tooltip escapes overflow, truncates long labels (#317) (e4d2ade)
  • ci: order sentry deploy after build (#309) (bfe1af3)
  • ci: skip outdated production deploys (b36197e)
  • clarify account creation modal copy (#274) (dafc58f)
  • clarify mobile settings navigation (#272) (62ab1b3)
  • dashboard: dismiss account card tooltip when tapping outside (#318) (753002f)
  • dashboard: treat loans as debt in net worth (#238) (f140b5d)
  • default account charts to user currency (#271) (38cf672)
  • default to standard onboarding option (#276) (d91d9d3)
  • demo-reset: use renamed 'ING Direct' bank (#301) (cfa54a2)
  • docker: ensure www-data owns storage after artisan commands (#329) (0eca002)
  • expose pi mcp extension as mcps.ts (#315) (c7cfa10)
  • i18n: add missing Spanish translations for mortgage UI strings (0a535fb)
  • i18n: translate Unknown Income/Expense and other missing ES strings (#331) (79075db)
  • keep iOS content below the notch (#280) (b505d68)
  • keep iOS popovers below the notch (#282) (ea9956f)
  • limit bank sync emails to one per day (#290) (552aa59)
  • loans: project monthly balances from actual entries instead of original params (#259) (7e95828)
  • make transaction sync email use default sender (#265) (7be0fe0)
  • open-banking: respect local email hours (#306) (fbffdd3)
  • open-banking: skip silent sync emails (#295) (473ac03)
  • open-banking: sort bank sync email data (#292) (c90e816)
  • open-banking: suppress first sync email (#310) (16675f6)
  • preserve cents in chart amounts (#270) (0735ee6)
  • pricing: update final release prices (#288) (319ca75)
  • prioritize exact bank search matches (#267) (1e20361)
  • reorder signed names in mail templates (#266) (fec9373)
  • route new PWA guests to signup (#313) (905edeb)
  • schedule: remove stale horizon snapshot (#293) (b438a1c)
  • split drip and default email senders (#263) (ce5692c)
  • user: persist detected timezones (#296) (fde5405)

Features

  • accounts: add loan amortization projections for loan accounts (#246) (bb65bdc)
  • accounts: add market value and annual revaluation to real estate accounts (#245) (fa11dc7)
  • accounts: add real estate asset tracking (#241) (395c4ad)
  • accounts: add today marker on projected balance chart (#321) (4b145e2)
  • accounts: allow setting initial balance when creating balance-tracking accounts (#239) (7a05621)
  • accounts: merge real estate accounts with linked mortgages in UI (#248) (6e97635)
  • accounts: show mortgage data and equity on real estate account page (#243) (9732432)
  • add appearance shortcut to user menu (#269) (3acb277)
  • billing: apply Stripe tax rates to subscriptions (#325) (74cbdd4)
  • cashflow: show tracked transfers in Sankey diagram (#237) (6dda5f5), closes hi#level
  • cashflow: track transfer categories in trends (#236) (272dac1)
  • dashboard: merge real estate accounts with linked mortgages on dashboard (752176e)
  • landing: add signed auth links (#312) (240fcf1)
  • link loans to existing properties (#275) (a7c1bd3)
  • loans: backfill historical balances on loan creation (#322) (5b1d059)
  • open-banking: remove feature flag gating (#297) (244344e)
  • real-estate: auto-calculate revaluation % and generate historical balances (#253) (094fb1b)
  • resend verification emails to unverified leads (#287) (5b78509)
  • selective retry of failed lead email jobs (#286) (f408dbe)
  • settings: centralize currency options and split profile/account support (#256) (3d58237)
  • store invested_amount in user currency instead of account currency (#262) (c3ff4c6)
  • stripe: add promo code generator (#311) (69665c3)
  • subscriptions: add configurable trial period to paid plans (#324) (b399aaa)
  • sync user leads to resend (#283) (dc0695c)
  • verify waitlist leads (#285) (d0aab3d)

0.1.19 (2026-03-17)

Bug Fixes

  • banking: treat 429 rate limit as transient, skip error status on sync (#224) (5b9ae2a)
  • cashflow: only count sign-matching transactions in Sankey category breakdown (#232) (9e2a9ca)
  • ci: allow deploy retry loop to survive curl timeout (#233) (cd40bc7)
  • haptics: use a local WebHaptics wrapper (#225) (f600524)
  • prevent account label combobox crash (#230) (a60fd6f)
  • settings: restore budgets settings redirect (#228) (e5fcaee)

Features

  • cashflow: make income/expense category rows clickable to transactions (#234) (ec24565)

0.1.18 (2026-03-12)

Bug Fixes

  • banking: correct backfill-ibans endpoint and handle expired sessions gracefully (#222) (08dfb07)
  • banking: correct backfill-ibans endpoint, handle expired sessions, and update labels (#223) (b92c4ed)
  • banking: update external_account_id on reconnect and store IBAN (#220) (4408f71)
  • banks:set-logo: add JPEG support test coverage and prompt for missing arguments (#214) (cbe28ff)
  • cashflow: hide amounts on sankey chart when privacy mode is enabled (8eb7a0c)
  • transactions: cap description column width to prevent horizontal overflow (#216) (28c8df3)

Features

  • banking: add banking:backfill-ibans command to populate missing IBANs (#221) (07ab9d5)
  • connections: add EnableBanking reconnect flow (#218) (1f5e6ac)
  • connections: filter already-connected institutions from connect bank dialog (#217) (1058904)
  • dashboard: sort net worth chart accounts by average balance (#219) (b1cf133)
  • emails: co-founder language, welcome rewrite, and Spanish translations (#208) (8ca4c8d)
  • landing: billing period toggle with yearly discount on pricing section (#215) (e9572e4)
  • landing: open-banking feature section with conditional grid layout (#209) (93369d8)
  • pricing: update landing page pricing table (#207) (21b03c7)

0.1.17 (2026-03-05)

Bug Fixes

  • amount-display: eliminate float round-trip causing missing thousands separator (#191) (956b661)
  • billing: create Stripe customer before redirecting to billing portal (#206) (e8bc5fd)
  • browser-test: reload transactions in syncing step and fix Skip button selector (#203) (3f6c676), closes #201
  • haptics: restore haptic feedback to MobileBackButton (#198) (fdc9d14)
  • i18n: fix unlocalised string in create budget form (#187) (40a7942)
  • i18n: force thousands separator for 4-digit amounts in es-ES locale (#193) (be2e205)
  • migration: make add_waitlist_columns migration idempotent (#200) (cf9071c)
  • onboarding: gate connect bank option behind open-banking feature flag (#197) (09d81ac)
  • static-analysis: clear phpstan-baseline by fixing all suppressed errors (#183) (3e087bd)
  • testcontainers: stop and remove MySQL container on signal and shutdown (#202) (011ba13)
  • transactions: move clear button inline with filters row on all screen sizes (#192) (b455ad7)

Features

  • (Onboarding) add categorization intro screen with benefit cards (#201) (a8dfac1)
  • budgets: make budget title clickable with muted hover effect (#186) (970e858)
  • dashboard: make top spending categories clickable with transaction filter link (#189) (832fc61)
  • haptics: add haptic feedback to nav items and back buttons (#196) (3d74267)
  • mobile: add scroll-aware back button on detail pages (#194) (7fec851)
  • onboarding: inline connected account flow with auto-account creation and step deep-linking (#184) (993c91a)
  • pricing: dynamic Stripe pricing with locale-aware formatting (#204) (ac1476e)
  • privacy: enable privacy mode for all users and extend amount masking (#182) (152b186)
  • subscription: allow free plan for open banking users without connected banks (#188) (d8f6a68)
  • waitlist: waiting list with referral system (#199) (4d0d203), closes #500

0.1.16 (2026-03-01)

Bug Fixes

  • i18n: localise missing strings in budget dialogs to Spanish (#177) (7260525)
  • i18n: localize billing settings page into Spanish (#176) (7a8eda9)
  • i18n: localize mobile bottom navigation labels into Spanish (#173) (717bf34)
  • Missing space between page sections and create button (6c5961d)
  • tooling: fix stringWidth error in release-it interactive prompt (#179) (866f908)
  • transactions: fix toolbar overflow on mobile and shorten button label (#175) (0388705)

Features

  • Budgets: add period navigation and unify period selector UI (#171) (0493b87)
  • i18n: add localization test and fix missing Spanish translations (#174) (9317238)
  • nav: add icon+label mobile nav with active pill and full-width buttons (#178) (efd86bc)
  • rules: move automation rule evaluation to the backend (#168) (eda72d4)
  • transactions: re-add select all matching filters to bulk actions bar (#169) (0d9fc5a)
  • ui: add create buttons to accounts and budgets pages (#172) (9f5e62f)
  • ui: add glowing effect to all card components (#170) (4d14e4d)

0.1.14 (2026-03-01)

Bug Fixes

  • accounts: widen bank column and truncate text on mobile (#163) (e01d62f)
  • categorizer: fetch uncategorized transactions from backend instead of IndexedDB (#165) (9bb835e)
  • i18n: fix missing space after Tracking label and add account/accounts Spanish translations (#167) (cd0da10)
  • prevent gain/loss sign from wrapping off the amount (#158) (a4d2100), closes whisper-money/whisper-money#157
  • ui: app icon visible on light wallpapers + country select overflow on mobile (#162) (1b7b147)
  • ux: improve status badge, hide balance update for connected accounts, localize delete confirm (#159) (79dd24b)

Features

  • automation-rules: simplify smart rules UI, fix re-evaluation, and localize amounts (#161) (b1f01e4)
  • cashflow: promote trend chart above money flow and increase height (#166) (39a47ec), closes hi#value
  • categories: add Self-Employment Income income category (#164) (77b225d)
  • i18n: localize Spanish translations and currency formatting (#160) (2b9fd23)

0.1.13 (2026-02-25)

Bug Fixes

  • budgets: handle refunds correctly in budget spending calculations (#152) (f2a7f95)
  • improve connection error message contrast in dark mode (#155) (e718f5d)
  • open-banking: use net_amounts for Indexa Capital invested amount calculation (#156) (ae2a8c0)

Features

  • open-banking: add update credentials flow for API-key connections (#154) (690be20)
  • Update facehash and enable blink (2550339)
  • use testcontainers for isolated MySQL in test runs (#153) (e4243c2)

0.1.12 (2026-02-24)

Bug Fixes

  • Pricing table on dark scheme (faddd59)

Features

  • enable invested amount tracking for savings accounts (#142) (0a9ca5b)
  • investment benefits — show gains/losses on investment accounts (#140) (299b8a5)

Performance Improvements

  • accounts: replace client-side API calls with Inertia deferred prop (#144) (ce9574a)
  • dashboard: optimize query performance and eliminate redundant requests (#146) (ae81e20)
  • make banking syncs incremental on subsequent runs (#141) (d48fea1)

0.1.10 (2026-02-20)

Bug Fixes

  • Accounts name on settings/account (202835f)
  • Add gap between filter/create button on mobile settings pages (#115) (726bce6)
  • Automerge PR's where not triggering CI on main branch (ab160ae)
  • Budget period not found on last day of period (#91) (00b2ca7)
  • cashflow: prevent breakdown cards overflow on mobile (#139) (c03f576)
  • charts: use settings popover for chart controls on mobile (#137) (880b276)
  • console error (a76826b)
  • Console log errors with Charts (48b4b7b)
  • Delete pending connection and show toast on cancelled bank authorization (#111) (c7f3f1a)
  • Disable email verification on dev/local (1b0f3ba)
  • Discord link (d7f0084)
  • Header on iOS (1d669b4)
  • Hide transaction checkboxes on mobile (#109) (abd7a2f)
  • Install script improvements (da328ef)
  • Missing import (b3103d4)
  • Onboarding, account not shown on the import drawer (#121) (eeca437)
  • Prevent account card content overflow on long names (#133) (a2b1e91)
  • Prevent automerge when CI checks have failed (#95) (6101cfd), closes #94 #94
  • Prevent re-syncing deleted bank transactions (#114) (d1ba189)
  • Small dashboard UI fix (1500e5c)
  • Top spending categories bug (e8e4f47)
  • Top spending categories on mobile (74ac346)
  • Top spending category must be 100% with always (f31a44b)
  • Trigger sync on transactions drawer (f88444f)
  • Use workflow_run trigger for automerge (#89) (dfd8bf8)
  • Welcome page mobile display for iOS (#94) (28f9432)

Features

  • Add --user and --connection filters to banking:sync command (#122) (b9abf49)
  • Add 'Today' marker on budget spending chart (#134) (a0d19ae)
  • Add automerge workflow for labeled PRs (#88) (10bd7da)
  • Add Binance integration (#131) (df9fc38)
  • Add Bitpanda exchange integration (#132) (fe76c2e)
  • Add daily balance chart with area visualization for account pages (#135) (126f7f7)
  • Add daily granularity toggle with area visualization to net worth chart (#136) (900cf41)
  • Add Indexa Capital integration (#130) (3f541ca)
  • Add multi-currency conversion for net worth charts (#138) (b743cad)
  • Add per-bank description formatter for bank-synced transactions (#120) (9242b3f)
  • Add previous period comparison to budget chart (#93) (9bbd91a)
  • Apply automation rules to bank-synced transactions (#112) (8ce0adf)
  • Bulk delete with type-to-confirm modal (#110) (03fec11)
  • Decrypt encrypted transactions on key unlock (#123) (6abec95)
  • Docker dev env with Caddy, PHP on host (#103) (caccac6)
  • Enable email verification on sign up (#97) (370d388)
  • Improve PWA standalone experience and redirect to dashboard (#90) (b4897ef), closes #71
  • Integrate EnableBanking as open banking provider (#106) (db7b6e4)
  • Plaintext transactions behind feature flag (#105) (e35f712)
  • Redirect to dashboard when running as installed PWA (#92) (1d1c0c3)
  • Remove dev command from whispermoney (1930cf2)
  • Replace settings sidebar with dropdown on mobile (#117) (b69138d)
  • Replace user avatar with Facehash faces (#86) (6aa9da3)
  • Show loading spinner on landing page when in PWA mode (#96) (21d36bb)
  • Show PWA install button on mobile landing page (#99) (abc71da)
  • Spanish localization (#74) (70b603e)

0.1.9 (2026-01-28)

Bug Fixes

  • Apply automation rule labels on transaction creation and import (#79) (a6a2a0d), closes #61
  • Delete transactions on local browser DB after deleting it on the backend (d1f69a2)

Features

  • Print sponsor message on whispermoney script (f03fcf5)
  • Release budgets feature to all users (#84) (a9b889b)
  • Reload transactions table on import proccess complete (bbc3027)
  • Sync new users to Resend contacts (#85) (952a5d4)

0.1.8 (2026-01-25)

Bug Fixes

  • Fire transaction updated event after a label change (#73) (134a292)
  • Progress bar color on dark scheme (d216d0c)
  • Typo in composer dev command (f30e600)
  • Update transactions (91dd23e)

Features

  • Add label support to single transaction update endpoint (#75) (e5eca1e)
  • Load transactions history on budget created (#72) (fee7ad3)

0.1.7 (2026-01-21)

Bug Fixes

  • Error showing randomg transactions from local browser DB (a7c8544)
  • unused vars (f1a2d78)

Features

0.1.6 (2026-01-19)

Bug Fixes

  • MYSQL_EXTRA_OPTIONS env var (49ed94c)

Features

  • Better, easier, and faster account balance update modal (#65) (f4ab918)
  • Don't check upgrades if not in main branch or in DEV_MODE (16a331a)

0.1.5 (2026-01-17)

Bug Fixes

  • broken dashboard while loading (253fe44)
  • Check IDOR vulnerabilities (#60) (80117c3)
  • delay emails to avoid reaching daily resend limit (8ac2520)
  • Remove scheduled horizon command (unused anymore) (63bde93)
  • Use user currency in top spending categories card (#57) (21a4d87), closes #56

Features

  • Add wispermoney local command (#59) (ffd9694)
  • Auto-open encryption key modal after login (#54) (d16282d)
  • Automated setup script for local deployment (#58) (819bea1)
  • Group small expending categories on the Sankey chart (5618893)
  • Persist transactions filter on the URL (c9877a5)
  • Persist cashflow period on the URL (1343e1c)

0.1.4 (2026-01-11)

Bug Fixes

  • delay emails to avoid reaching daily resend limit (8ac2520)
  • Remove scheduled horizon command (unused anymore) (63bde93)

Features

  • Group small expending categories on the Sankey chart (5618893)
  • Persist transactions filter on the URL (c9877a5)
  • Persist cashflow period on the URL (1343e1c)

0.1.3 (2026-01-09)

Bug Fixes

  • issue on filters when no label created (cb1d6a2)
  • scroll category combobox to top while searching (c1ddc14)

Features

  • new roadmap and feedback links (0646b38)
  • Send custom emails to users (#52) (683b3f3)

0.1.2 (2026-01-07)

New Features

Bug Fixes

  • issue on filters when no label created (cb1d6a2)

0.1.1 (2026-01-05)

Bug Fixes

  • add SSR guards to localStorage/sessionStorage access (3b56e24)
  • add SyncProvider to SSR entry point (3177fa3)
  • app logo icon auto of the dashboard (e813849)
  • apply border radius to visible bar segments in stacked chart (413f83f)
  • asd key element to accounts index page (8eab41a)
  • auto-regenerate APP_KEY if invalid format (missing base64: prefix) (797cb06)
  • automated rules broken and now they work in batches (890593d)
  • Automated rules with labels (#32) (bf0c9ae)
  • bulk action bar style (045c7a5)
  • category-combobox: Improve UI responsiveness and truncate category names (2cecd01)
  • charts: mobile ui, and desktop tooltips (818a49e)
  • deploy ci (d4410a6)
  • increase nginx buffer sizes (a87b36d)
  • make encryption key storage SSR-safe to prevent 502 errors (0fcc66e)
  • make useIsMobile hook and utility functions SSR-safe (40762bc)
  • migration history (b52e2de)
  • mobile: account chart (14a9343)
  • normalize transaction_date to YYYY-MM-DD for duplicate detection (#4) (7492b2e)
  • re-enable ssr for all routes after issue is fixed (1d96f5d)
  • rong schedule import (c684695)
  • sync: make transaction creation idempotent (#38) (3cbe0a7)
  • toast on mobile (716e21b)
  • transaction list on account page (ce09f32)
  • TransactionFilters: Update badge styling for uncategorized selection (a2d7af2)
  • transactions: Decrypt account names for automation rule evaluation (323b738)
  • transactions: We were creating transactions with numberic ID instead of UUID v7 (52e1a7b)
  • use direct PDO connection test for MySQL readiness check (a7ee776)
  • use markdown to send user lead invitation mail (1e9566a)
  • wrap SSR app with EncryptionKeyProvider (770f091)
  • wrong user menu text (b2d1bcf)

Features

  • .cursor: Add whisper-money rule configuration (e80647d)
  • AccountBalanceSync: Update existing balances and add new ones efficiently (c2c6894)
  • Add account balance chart improvements and icons (#5) (5f149b4)
  • Add bank selection to edit transaction dialog (0473371)
  • Add Discord invite link to welcome page (f3c0fa1)
  • Add financial models and seeders (635cde0)
  • Add import transactions button to transactions page (e5a77a9)
  • add multiple chart view modes for net worth evolution (#37) (c5df59c)
  • Add new category icons and colors (c339105)
  • Add privacy mode to hide monetary amounts (#28) (8811afb)
  • add transaction labels feature (#24) (4b5d65b)
  • add version tracking with git tags and changelog (db81c9b)
  • auth: Add key clearing on login (3795e46)
  • automation: Add re-evaluate all transactions functionality (e937a86)
  • automation: Add sync functionality to automation rule dialogs (e009abb)
  • category: Update default categories list and sorting logic (73d847f)
  • centralize pricing config with multiple plans support (#20) (58b9343)
  • Configure Resend email integration (#34) (3c22453)
  • Docker: Add Bun installation and update build process (4379239)
  • Docker: Add Wayfinder route generation and update asset build process (a13e7fd)
  • Docker: Optimize build process by removing unnecessary steps and adjusting environment variables (732775e)
  • Docker: Replace pnpm with Bun for Node.js package management (5b45006)
  • Docker: Replace pnpm with bun for package management and build process (b4b891f)
  • encrypted-text: Add animation and random character generation (7d8474f)
  • encrypted-text: Improve encryption UI with dynamic masking and loading state (ff186a4)
  • Implement drip email campaign system (#35) (46c5b13)
  • import-transactions-drawer: Add json-logic-js dependency and improve import logic (1df3bad)
  • lucide-react: Add custom icons to Toaster component (573b2fd)
  • queue: Implement queueable email jobs with rate limiting (3d0d6c8)
  • react: add authentication check in SyncProvider (48bce81)
  • Remove console.log and add padding to components (c1f99fe)
  • Replace Input with Textarea for editable descriptions (2b6acf4)
  • settings: Update account management UI and add sync functionality (ab63edd)
  • shared: Add CategoryCombobox component (57879bb)
  • sync: Add sync functionality for accounts, banks, categories, and status button (9256148)
  • traefik: Add secure headers middleware to WhisperMoney service (242be5f)
  • TransactionController: Add store method for creating transactions (c1fbd4d)
  • TransactionSyncController: Sort transactions by transaction_date and updated_at (41f5c64)
  • ui: Implement virtual scrolling for DataTable component (07ca633)
  • ui: Improve chart tooltip content rendering and calculation (d04b6a0)
  • update date formatting logic in transaction components (d13ecc2)
  • Update encryption key button icon based on state (08baf3b)
  • Update ProfileController to include two-factor authentication settings (e21c9cc)
  • Update welcome page title to focus on understanding finances (3ac7102)
  • use-dashboard-data: Add conditional formatting for current year dates (525e770)
  • welcome: Add GitHub link and refactor auth buttons (2ab362d)

Reverts

  • Revert "swap horizon -> queue:work on mysql" (03880ca)

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.1.0] - 2025-12-28

Added

  • Initial release with end-to-end encrypted finance tracking
  • Account management and bank sync via GoCardless
  • Transaction categorization and labeling
  • Net worth and account balance charts with multiple view modes
  • PWA support for mobile installation