121 KiB
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
- account: block deletion while subscription or trial is active (#531) (2bfb569) by @victor-falcon
- analysis: align summary card amounts to a common baseline (#515) (21f8f3b) by @victor-falcon
- analysis: truncate long breakdown names so amounts stay in widget (#518) (49acc8a) by @victor-falcon
- auth: prevent FormData crash on successful login (#503) (f4bbbfd) by @victor-falcon
- automation-rules: hint amount sign for expenses vs income (#524) (e526f86) by @victor-falcon
- budgets: make period generation idempotent (#533) (cd323bb) by @victor-falcon
- cashflow: bound trend window to prevent request timeout (#534) (1d4bcd5) by @victor-falcon
- currency: make rate fetching resilient to slow CDN (#502) (4b90bcf) by @victor-falcon
- header: keep mobile logo on one line, compact auth buttons (#512) (1530544) by @victor-falcon
- import: honor selected date format for CSV imports (#494) (744d874) by @victor-falcon
- layout: keep bottom padding while floating nav is visible (#537) (6671d89) by @victor-falcon
- perf: batch feature flag resolution in shared Inertia data (#500) (cb728ce) by @victor-falcon, closes #496
- sentry: only report errors in production (#467) (d68fee6) by @victor-falcon
- transactions: combine category and label filters with OR (#495) (af87ac7) by @victor-falcon
- transactions: improve mobile analysis button affordance (#520) (3223824) by @victor-falcon
- transactions: prevent crash when sorting by nullable column (#501) (a69c602) by @victor-falcon
- transactions: tidy filter bar into two balanced rows (#510) (6486908) by @victor-falcon
- verify email via signed link without requiring login (#490) (14b7955) by @victor-falcon
Features
- add catch-all budgets (#527) (dbec1c4) by @tonigruni
- ai: add weekly AI-suggestions cohort report (#530) (906e3cc) by @victor-falcon
- ai: auto-categorize transactions with AI (behind flag) (#535) (8013a0b) by @victor-falcon
- ai: defer per-transaction categorization until onboarding completes (#536) (e065d4a) by @victor-falcon
- ai: share AI sparkle icon and mark AI-generated rules (#538) (7dde67c) by @victor-falcon
- ai: suggest automation rules during onboarding (#523) (8056ede) by @victor-falcon
- analysis: break down spending by sub-category (#508) (c944a2c) by @victor-falcon
- analysis: per-category 12-month spending drawer (#519) (9c3c4d5) by @victor-falcon
- analysis: project-aware transaction analysis (#513) (7cc49a5) by @victor-falcon
- analysis: shared bar-list breakdowns in transaction drawer (#517) (bcd025f) by @victor-falcon
- auth: show/hide toggle on password fields (#499) (58254fc) by @victor-falcon
- banking: add command to disconnect connections by id (#497) (9192947) by @victor-falcon
- cashflow: enlarge and color-code net cashflow and saved cards (#505) (346e21a) by @victor-falcon
- console: add agent:db command for querying local and prod DB (#522) (d2a4412) by @victor-falcon
- currencies: add Colombian and Dominican peso (#471) (e5b4933) by @victor-falcon
- currency: add NZD (New Zealand Dollar) (#504) (899ea6a) by @victor-falcon
- enable category tree for all users, remove flag (#488) (f8cc881) by @victor-falcon
- expand parent categories inline in breakdowns (#486) (53d0518) by @victor-falcon
- expand Sankey subcategories inline (#485) (679c8d7) by @victor-falcon
- importer: support YYYYMMDD date format (#470) (f9d1303) by @victor-falcon
- landing: add go now button to redirect modal (#506) (c53c40c) by @victor-falcon
- landing: real testimonials with gravatar/facehash avatars (#493) (300188f) by @victor-falcon
- open-banking: finalize bank connection without a session via state token (#498) (a7dde5f) by @victor-falcon
- optionally update manual account balance on transaction delete (#491) (45e25e0) by @victor-falcon
- parent/child category tree (#474) (1cc1056) by @victor-falcon
- settings: let users disable bank transactions email (#472) (e178f1b) by @victor-falcon
- single-open Sankey expand, fit overflowing children (#487) (721cbef) by @victor-falcon
- transactions: filtered analysis dashboard (#507) (8375fd4) by @victor-falcon
- transactions: save and reuse transaction filters (#496) (8df44c2) by @victor-falcon
- users: track last login and last active timestamps (#516) (fcf2d3d) by @victor-falcon
- welcome: add Albert G. testimonial (#529) (0f48ffb) by @victor-falcon
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
- allow managing canceled connections (#417) (eaba315)
- build arm64 images on native runners (#419) (364c72d)
- preview categorizer rule application (#421) (faf046b)
- publish arm64 docker images asynchronously (#418) (4411601), closes #412
Features
- keep past due subscriptions active (#416) (88faa5b)
- mail: use AWS SES for email delivery (#422) (d8bb78e)
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
- Coinbase banking integration (#388) (e71a743)
- import: calculate balances from transactions (#403) (66ff427)
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
- Add sentry issue slash command (#375) (c929c1f)
- Update worktree script (#366) (360a38a)
- Speed up PR CI browser path (#365) (e36d6f3)
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
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
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
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
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