Commit Graph

2161 Commits

Author SHA1 Message Date
Juan José Mata
2c50bd1d9a Add demo account to Flutter client also 2026-02-18 11:22:44 +01:00
Juan José Mata
42724335ab Default login for Flutter client beta 2026-02-18 11:17:44 +01:00
Juan José Mata
e9bba43554 Wire TestFlight up to mobile releases 2026-02-18 10:31:24 +01:00
Juan José Mata
65f1daa995 iOS build fixes/prep for TestFlight 2026-02-18 10:11:16 +01:00
Juan José Mata
3b0b2f7ada LLC is Sure Finances, keep it the same 2026-02-18 09:22:14 +01:00
Juan José Mata
e9d59a9a0e New icon set and name 2026-02-18 01:57:22 +01:00
Juan José Mata
e2dc0513c9 Safe area around icon 2026-02-18 01:54:17 +01:00
Juan José Mata
6831f56375 Add flutter_export_environment.sh to .gitignore
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-18 01:41:59 +01:00
Juan José Mata
fe5419c1fd Ignore changes in mobile/ directory for publish workflow
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-18 01:40:27 +01:00
Juan José Mata
41bc05a7ac Enhance mobile release workflow with dispatch and script
Added workflow_dispatch trigger and updated GitHub Release step to use a script for release notes and asset uploads.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-18 01:11:37 +01:00
Juan José Mata
2e752d3cec New icons 2026-02-18 00:59:11 +01:00
Juan José Mata
d933d2a82f New icon 2026-02-18 00:58:15 +01:00
Juan José Mata
0d3862e25e Fix version number for Android 2026-02-18 00:36:11 +01:00
Juan José Mata
ea1c190127 Version number in Gradle build 2026-02-18 00:27:33 +01:00
Juan José Mata
da754b8d05 Version number to bundle files 2026-02-18 00:23:02 +01:00
Juan José Mata
d0bf9fc3f2 More .gitignore noise 2026-02-18 00:13:52 +01:00
dependabot[bot]
e499036d7d chore(deps): bump rack from 3.1.18 to 3.1.20 (#1013)
Bumps [rack](https://github.com/rack/rack) from 3.1.18 to 3.1.20.
- [Release notes](https://github.com/rack/rack/releases)
- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rack/rack/compare/v3.1.18...v3.1.20)

---
updated-dependencies:
- dependency-name: rack
  dependency-version: 3.1.20
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 21:06:03 +01:00
Juan José Mata
15b9bf78bc Update Flutter iOS run command in mobile/README.md
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-17 17:25:52 +01:00
Alessio Cappa
862d39dc3b fix: Remove additional padding from JS controller and add directly as a class (#1007) 2026-02-16 23:36:27 +01:00
soky srm
d79d86d848 PDF ai import (#1006)
Add support to review transactions for AI pdf import
2026-02-16 21:11:41 +01:00
github-actions[bot]
16aca7812a Bump version to next iteration after v0.6.8-alpha.10 release 2026-02-16 19:27:21 +00:00
Juan José Mata
76bc12cf7b Improve tests 2026-02-16 19:17:58 +00:00
Juan José Mata
06fedb34f3 Add new columns and sorting to admin users list (#1004)
* Add trial end date to admin users list

* Add new columns

* Regression
2026-02-16 20:10:14 +01:00
Juan José Mata
a68f329dbd feat: Update gh-pages README with latest mobile release links (#1003)
Add steps to the mobile-release workflow that checkout the gh-pages
branch and update its README.md with direct download links to the
latest Flutter mobile clients (Android APK, debug APK, iOS unsigned
build). Uses HTML comment markers for idempotent updates on subsequent
releases.

https://claude.ai/code/session_01GuUjjmMzxvdSwfvhrjvJr1

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-16 17:10:54 +01:00
sentry[bot]
19c2abd622 Fix: Handle missing category in SetTransactionCategory executor (#1001)
Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com>
2026-02-16 14:01:28 +01:00
Juan José Mata
b48cec3a2e fix: Transfers were not syncing between accounts (#987)
* fix: Include investment_contribution in transfer? check and protect transfer entries from sync

Transfer transactions with kind "investment_contribution" were not recognized
as transfers by the UI, causing missing +/- indicators, "Transfer" labels,
and showing regular transaction forms instead of transfer details.

Also adds user_modified: true to entries created via TransferMatchesController
and SetAsTransferOrPayment rule action to protect them from provider sync
overwrites, matching the existing behavior in Transfer::Creator.

https://claude.ai/code/session_019BZ5Z1aqKSK3cRdR81P5Jg

* fix: Centralize transfer/budget kind constants for consistent investment_contribution handling

Define TRANSFER_KINDS and BUDGET_EXCLUDED_KINDS on Transaction to eliminate
hard-coded kind lists scattered across filters, rules, and analytics code.

investment_contribution is now consistently treated as a transfer in search
filters, rule conditions, and UI display (via TRANSFER_KINDS), while budget
analytics correctly continue treating it as an expense (via BUDGET_EXCLUDED_KINDS).

https://claude.ai/code/session_019BZ5Z1aqKSK3cRdR81P5Jg

* fix: Update tests for consistent investment_contribution as transfer kind

- search_test: loan_payment is now in TRANSFER_KINDS, so uncategorized
  filter correctly excludes it (same as funds_movement/cc_payment)
- condition_test: investment_contribution is now a transfer kind, so it
  matches the transfer filter rather than expense filter

https://claude.ai/code/session_019BZ5Z1aqKSK3cRdR81P5Jg

* fix: Eliminate SQL injection warnings in Transaction::Search

Replace string-interpolated SQL with parameterized queries:
- totals: use sanitize_sql_array with ? placeholders
- apply_category_filter: pass TRANSFER_KINDS as bind parameter
- apply_type_filter: use where(kind:)/where.not(kind:) and
  parameterized IN (?) for compound OR conditions
- Remove unused transfer_kinds_sql helper

https://claude.ai/code/session_019BZ5Z1aqKSK3cRdR81P5Jg

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-16 13:50:06 +01:00
Alessio Cappa
23087c1e98 feat: Display dashboard as a 2-columns grid on big screens (#1000)
* feat: display 2 columns grid in dashboard for wide screens

* fix: update sortable controller to consider X/Y coordinates

* fix: lint issues + missing variable init
2026-02-16 13:45:49 +01:00
Juan José Mata
1995c62ddf Flutter title and icon alignment fixes 2026-02-16 04:37:18 +01:00
Juan José Mata
2dcb4b4f67 Small Flutter UI tweaks 2026-02-16 04:23:00 +01:00
Juan José Mata
eb0d05a7fb Intro mode in Flutter client fixes 2026-02-16 02:17:03 +01:00
Mark Hendriksen
f5469ea774 Replace text-tertiary with text-subdued in views (#999)
* Replace text-tertiary with text-subdued in views

Replace usages of the text-tertiary utility with text-subdued across several view partials to standardize subdued text styling because text-tertiary does not exist in the design system (reports, doorkeeper auth, simplefin items). Also adjust the net worth empty-liabilities markup to use a grid layout for consistent spacing, and update the related controller test selector to match the new CSS class.

* Standardize empty net worth message markup

Replace inconsistent markup and classes for empty asset/liability sections in the net worth partial. Swap text-secondary/p-2/text-center for text-subdued with unified padding (py-3 px-4 lg:px-6), and simplify the liabilities block from a grid/div to a single paragraph for consistent styling and spacing.
2026-02-15 23:33:41 +01:00
Mark Hendriksen
ebf89808f5 Fix separators in breakdown table view (#996)
* Fix separators in breakdown table view

Correct conditional logic for rendering column separators (rulers) in the reports breakdown table. The top-level check now compares idx to groups.size instead of group.size, and the subcategory check compares idx to group[:subcategories].size. This ensures separators are shown between categories and subcategories correctly, avoiding missing or extra rulers.

* Fix subcategory index variable name in partial

Rename the inner loop index from `idx` to `sub_idx` in app/views/reports/_breakdown_table.html.erb to avoid shadowing the outer `idx`. This ensures the conditional that renders the separator (`shared/ruler`) uses the correct index for subcategories, preventing incorrect rendering of separators between subcategory rows.

* Fix conditional block order in breakdown table

Reorder ERB tags to properly nest the subcategory conditional and the ruler render in the reports breakdown partial. This ensures the divider is only rendered between subcategories and prevents mismatched ERB/end tags that could break template rendering.
2026-02-15 13:25:28 +01:00
Alessio Cappa
e0ae71f33a fix: Viewport issue in PWA (#995)
* fix: move safe-area padding from body/HTML to navbars. Add script to compute app height dynamically.

* fix: Initialize sankey tooltip with top-0 to avoid overflow

* fix: add fallback to HTML height

* fix: properly set bottom spacing and use position fixed for bottom navbar

* fix: move viewport controller initialization
2026-02-15 13:23:19 +01:00
BitToby
e573896efe fix: locale-dependent category duplication bug (#956)
* fix: locale-dependent category duplication bug

* fix: use family locale for investment contributions category to prevent duplicates and handle legacy data

* Remove v* tag trigger from flutter-build to fix double-runs

publish.yml already calls flutter-build via workflow_call on v* tags,
so the direct push trigger was causing duplicate workflow runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Refactor mobile release asset flow

* fix: category uniqueness and workflow issues

* fix: fix test issue

* fix: solve test issue

* fix: resolve legacy problem

* fix: solve lint test issue

* fix: revert unrelated changes

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:33:51 +01:00
dataCenter430
326b925690 fix: prevent New rule modal from closing when removing conditions or actions (#991) 2026-02-15 09:34:34 +01:00
aviu16
bd34165426 fix: prevent value overflow in Assets vs Liabilities card (#992)
* fix: prevent value overflow in Assets vs Liabilities card

Fixes issue where large asset/liability values overflow the container
when AI side panel is open and reduces horizontal space.

Changes:
- Added flex-wrap to allow values to wrap to next line if needed
- Added break-all to both asset and liability values for long numbers
- Added shrink-0 to minus sign to prevent it from shrinking

Fixes #976

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* refactor: use break-words instead of break-all per code review

Changed from break-all to break-words for currency values to prevent
awkward mid-number breaks (e.g., $1,234,5 / 67.89). break-words only
breaks when content overflows and keeps values intact when possible,
providing cleaner line breaks while still preventing overflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 09:31:15 +01:00
BitToby
170bd2858d fix: inverted Buy/Sell type selection by changing amount.negative to amount.positive in trade edit views (#952) 2026-02-14 10:45:50 +01:00
github-actions[bot]
9ce7669e1c Bump version to next iteration after v0.6.8-alpha.9 release 2026-02-14 00:19:56 +00:00
Juan José Mata
8264943f23 Show disabled import options when no accounts exist (#977)
* Show disabled import options before accounts exist

Keep account-dependent import choices visible on /imports/new and render them as disabled with guidance when no accounts are available.

* Refactor disabled import options: extract partial, fix accessibility (#986)

- Extract _import_option partial to eliminate duplicated enabled/disabled
  markup across TransactionImport, TradeImport, and MintImport (also
  used by AccountImport, CategoryImport, RuleImport for consistency)
- Replace misleading chevron-right with lock icon in disabled state
- Add aria-disabled="true" for screen reader accessibility
- Remove redundant default: parameter from t() call
- Fix locale key ordering (requires_account after import_* keys)
- Fix extra blank line in test file
- Add assertion for aria-disabled attribute in test

https://claude.ai/code/session_016j9tDYEBfWX9Dzd99rAYjX

Co-authored-by: Claude <noreply@anthropic.com>

* Tailwind fixes

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-14 01:10:25 +01:00
Juan José Mata
bf0be85859 Expose ui_layout and ai_enabled to mobile clients and add enable_ai endpoint (#983)
* Wire ui layout and AI flags into mobile auth

Include ui_layout and ai_enabled in mobile login/signup/SSO payloads,
add an authenticated endpoint to enable AI from Flutter, and gate
mobile navigation based on intro layout and AI consent flow.

* Linter

* Ensure write scope on enable_ai

* Make sure AI is available before enabling it

* Test improvements

* PR comment

* Fix review issues: test assertion bug, missing coverage, and Dart defaults (#985)

- Fix login test to use ai_enabled? (method) instead of ai_enabled (column)
  to match what mobile_user_payload actually serializes
- Add test for enable_ai when ai_available? returns false (403 path)
- Default aiEnabled to false when user is null in AuthProvider to avoid
  showing AI as available before authentication completes
- Remove extra blank lines in auth_provider.dart and auth_service.dart

https://claude.ai/code/session_01LEYYmtsDBoqizyihFtkye4

Co-authored-by: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-14 00:39:03 +01:00
Pluto
e99e38a91c fix: Handle empty compound conditions on rules index (#965)
* fix: Handle empty compound conditions on rules index

* fix: avoid contradictory rule condition summary on /rules

* refactor: move rules condition display logic from view to model

* fix: localize rule title fallback and preload conditions in rules index
2026-02-13 19:53:24 +01:00
Juan José Mata
34afc1f597 Document merchants API endpoints (#980)
Add rswag request specs for merchants index/show and define a MerchantDetail schema used by the docs. Update the generated OpenAPI document with merchants paths and schema.
2026-02-13 19:40:23 +01:00
Juan José Mata
868a0ae4d8 Add family moniker selection and dynamic UI labels (#981)
* Add family moniker selection and dynamic UI labels

Introduce a Family moniker persisted in the database with allowed values Family/Group, add required onboarding selection for it, and thread moniker-aware copy through key user-facing views and locales. Also add helper methods and tests for onboarding form presence and family moniker behavior.

* Small copy edits/change moniker question order

* Conditional Group/Family onboarding flow fixes

* Fix label

* Grouping of fields

* Profile Info page Group/Family changes

* Only admins can change Group/Family moniker

* Repetitive defaults

* Moniker in Account model

* Moniker in User model

* Auth fix

* Sure product is also a moniker

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-13 19:30:29 +01:00
Claude
d9acf19038 Disable Turbo prefetch on dashboard outflow category links
Hovering over category links in the outflow donut chart triggered
Turbo 8's default link prefetching, which made a real request to the
transactions controller. The controller's store_params! before_action
saved those filter params (category + date range) to the session.
When the user later navigated to /transactions via the nav menu,
the stored params were restored, showing an unexpected filtered view.

Adding data-turbo-prefetch="false" prevents the prefetch on hover
while preserving the intended click-to-navigate behavior.

https://claude.ai/code/session_01Na7AF1wyidPwFdPq5w8oaw
2026-02-13 15:46:19 +01:00
Juan José Mata
32b01165c9 Flutter login polish (#973)
* Skip config screen by setting demo site default

* Small copy edits

* Login page polish
2026-02-12 23:36:21 +01:00
Juan José Mata
c4824bf34d Mobile-only GitHub workflow builds (#975)
* Mobile build only

* Fix copy on debug

* PR review comments
2026-02-12 23:35:00 +01:00
github-actions[bot]
25b02976f9 Bump version to next iteration after v0.6.8-alpha.8 release 2026-02-11 20:01:54 +00:00
Juan José Mata
9f6bf1080e Bring back /reports link
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-11 20:44:55 +01:00
Juan José Mata
d3c4986bfd Fix flaky expectations in import-related tests (#963) 2026-02-11 19:42:26 +01:00
Juan José Mata
8276800859 Fix tests 2026-02-11 18:03:15 +00:00