This website requires JavaScript.
22835fa31b
feat(currency): add SGD (Singapore Dollar) (#794 )
main
Ideal
2026-08-13 21:55:09 +0800
5190d58e93
feat(landing): add two user testimonials (#796 )
Víctor Falcón
2026-08-13 15:54:45 +0200
1e3f973672
refactor(landing): stop testimonials from carrying a dead email hash
Víctor Falcón
2026-08-13 15:40:19 +0200
4a2f853386
feat(landing): add two user testimonials
Víctor Falcón
2026-08-13 15:29:59 +0200
6219b6b7af
fix(banking): recognise a spent daily allowance, and stop it swallowing manual syncs (#795 )
Víctor Falcón
2026-08-13 13:25:50 +0200
24258a8037
fix(banking): stop the backoff from silently swallowing a manual sync
Víctor Falcón
2026-08-13 13:14:19 +0200
ad99a46f09
fix(banking): recognise a spent daily allowance from what the banks actually say
Víctor Falcón
2026-08-13 12:53:36 +0200
3baf9e5b91
feat(currency): add SGD (Singapore Dollar)
idealsh
2026-08-08 14:43:04 +0800
57bcdf89c9
fix(banking): give every account its turn when the bank refuses one of them (#793 )
Víctor Falcón
2026-08-13 10:27:18 +0200
8fef50f829
fix(subscriptions): assign the price arm before registration, not after (#792 )
Víctor Falcón
2026-08-13 10:14:37 +0200
271b659260
fix(banking): give every account its turn when the bank refuses one of them
Víctor Falcón
2026-08-13 10:13:56 +0200
59b1ff61df
fix(subscriptions): assign the price arm before registration, not after
Víctor Falcón
2026-08-12 16:30:00 +0200
98f03db50c
fix(landing): keep the header from overflowing at mid widths (#791 )
Víctor Falcón
2026-08-12 15:47:03 +0200
44d771a580
fix(landing): keep the nav readable while it is icon-only
Víctor Falcón
2026-08-12 15:33:02 +0200
df79f1b77d
chore: release v0.2.8 (#790 )
v0.2.8
Víctor Falcón
2026-08-12 15:28:48 +0200
e210f7f5cf
chore: release v0.2.8
Víctor Falcón
2026-08-12 15:20:37 +0200
089423b053
fix(landing): keep the header from overflowing at mid widths
Víctor Falcón
2026-08-12 15:19:24 +0200
a1a5bdb69a
fix(subscriptions): round the high yearly price to a .99 monthly equivalent
price-yearly-rounding
Víctor Falcón
2026-08-12 14:01:17 +0200
5a61375ea5
feat(subscriptions): add an A/B price experiment (€3.99 control vs €8.99 high) (#700 )
Víctor Falcón
2026-08-12 13:36:49 +0200
2c7fe5d64a
fix(wise): send the pagination cursor under the name Wise reads (#788 )
Víctor Falcón
2026-08-12 13:30:37 +0200
dd56224947
fix(wise): sync the balance first, and don't let it cost the transactions
Víctor Falcón
2026-08-12 13:19:06 +0200
35f12096c2
fix(wise): bound the walk to the job's budget, once per connection
Víctor Falcón
2026-08-12 13:19:06 +0200
a7523bfc4f
fix(wise): send the pagination cursor under the name Wise reads
Víctor Falcón
2026-08-12 13:14:33 +0200
0af873d88a
fix(subscriptions): treat a blank start date as the experiment being off
Víctor Falcón
2026-08-12 12:55:49 +0200
2f00a56272
fix(budgets): re-derive budget membership when labels are attached without a model event (#787 )
Víctor Falcón
2026-08-12 12:48:47 +0200
f4c21147f1
feat(budgets): count shared accounts at the owner's percentage (#786 )
Víctor Falcón
2026-08-12 12:47:43 +0200
93c3ecda8d
fix(subscriptions): annotate PriceExperiment as @api for static analysis
Víctor Falcón
2026-08-12 12:44:11 +0200
ea92ca1292
feat(subscriptions): A/B price experiment (€3.99 control vs €8.99 high)
Víctor Falcón
2026-08-12 12:31:06 +0200
ba0ee0eab0
feat(budgets): count shared accounts at the owner's percentage
Víctor Falcón
2026-08-12 12:29:32 +0200
56d7f8c960
fix(budgets): cover the bulk actions bar and stop the re-evaluate job queueing one reassignment per row
Víctor Falcón
2026-08-12 12:24:32 +0200
fa4b420cd9
fix(budgets): re-derive budget membership when labels are attached without a model event
Víctor Falcón
2026-08-12 12:09:11 +0200
8af9b74fd3
refactor(budgets): extract the tracked-period lookup out of assignTransaction (#785 )
Víctor Falcón
2026-08-12 11:50:46 +0200
42b67d0609
refactor(open-banking): bring the authorization callback back under the complexity threshold (#784 )
Víctor Falcón
2026-08-12 11:47:22 +0200
7edbff10ac
refactor(budgets): extract the tracked-period lookup out of assignTransaction
Víctor Falcón
2026-08-12 11:29:07 +0200
1d5c65a23a
fix(open-banking): keep a non-string callback code from 500ing
Víctor Falcón
2026-08-12 11:35:50 +0200
b7c1d4d697
test(open-banking): cover the callback session exchange failure
Víctor Falcón
2026-08-12 11:27:40 +0200
8139aad99f
refactor(open-banking): extract the callback session and completion branches
Víctor Falcón
2026-08-12 11:23:06 +0200
baacd24839
refactor(open-banking): extract the callback authorization error branch
Víctor Falcón
2026-08-12 11:20:41 +0200
091457c747
fix(banking): stop bank connections from silently dropping out of scheduled syncing (#782 )
Víctor Falcón
2026-08-12 11:32:36 +0200
4ba78e54d8
feat(reports): email a monthly CSV of active user emails to the owners (#783 )
Víctor Falcón
2026-08-12 11:29:28 +0200
86f172218e
fix(banking): record the repeat job deaths, not just the first one
Víctor Falcón
2026-08-12 11:21:16 +0200
caa94bee8b
refactor(reports): configure report recipients via env and cover mail rendering
Víctor Falcón
2026-08-12 11:11:06 +0200
b6bc7756bc
feat(subscriptions): end the trial experiment and make the trial length per plan (#762 )
Víctor Falcón
2026-08-12 10:59:55 +0200
d570aee211
feat(reports): email a monthly CSV of active user emails to the owners
Víctor Falcón
2026-08-12 10:41:11 +0200
e01979f002
fix(banking): bound the unique lock so a lost one can't park a connection
Víctor Falcón
2026-08-12 09:43:31 +0200
e0481df497
fix(banking): record the job deaths that never reach handle()
Víctor Falcón
2026-08-12 09:43:03 +0200
e60fdf4faa
fix(banking): repair the two connections stranded just before #757
Víctor Falcón
2026-08-12 09:41:08 +0200
030de06618
fix(banking): hand back the retry budget when a connection is reconnected
Víctor Falcón
2026-08-12 09:40:10 +0200
0c5f075c1f
fix(banking): don't charge an out-of-band job death to the connection
Víctor Falcón
2026-08-12 09:38:25 +0200
5ec62d8625
fix(observability): stop our own page navigations from reporting fake network errors (#780 )
Víctor Falcón
2026-08-11 18:12:00 +0200
ab3902af39
fix(budgets): keep labeled expenses out of the catch-all budget (#781 )
Víctor Falcón
2026-08-11 17:45:19 +0200
1d03f35477
fix(budgets): let the tracking budget win before the catch-all absorbs
Víctor Falcón
2026-08-11 17:33:29 +0200
b85f865c41
fix(budgets): let the tracking budget win before the catch-all absorbs
Víctor Falcón
2026-08-11 17:32:36 +0200
6a7059d42d
fix(onboarding): stop showing a match count for the token the user replaced
Víctor Falcón
2026-08-11 17:14:33 +0200
0100a97dbd
fix(observability): route the reloads through the same departure
Víctor Falcón
2026-08-11 17:11:01 +0200
4930405e79
fix(budgets): keep labelled expenses out of the catch-all budget
Víctor Falcón
2026-08-11 17:10:30 +0200
09ea3b010b
fix(observability): stop leaving when the page turns out to have survived
Víctor Falcón
2026-08-11 17:09:42 +0200
b7dc8dc647
fix(observability): match the message Inertia actually produces
Víctor Falcón
2026-08-11 17:07:48 +0200
386f625f15
fix(observability): stop our own page navigations from reporting fake network errors
Víctor Falcón
2026-08-11 16:54:29 +0200
b2ff1664e2
feat(mcp): budget tools — read, create, edit and delete (#779 )
Víctor Falcón
2026-08-11 16:28:53 +0200
131d846b4d
feat(mcp): delete budgets, and apply both reviews
Víctor Falcón
2026-08-11 16:16:59 +0200
f4a74d88d6
fix(budgets): stop a day-of-month start day from hanging weekly period generation
Víctor Falcón
2026-08-11 16:16:49 +0200
2a4134966b
feat(mcp): read, create and edit budgets
Víctor Falcón
2026-08-11 15:50:40 +0200
12cab755e3
feat(roadmap): add a public roadmap page mirrored from UserJot (#778 )
Víctor Falcón
2026-08-11 16:14:59 +0200
0ebac688f8
feat(roadmap): add a public roadmap page mirrored from UserJot
Víctor Falcón
2026-08-11 16:02:02 +0200
5ee992644c
feat(landing): stop auto-redirecting signed-in visitors to the dashboard (#777 )a
Víctor Falcón
2026-08-11 16:02:18 +0200
6803f2cf0e
refactor(accounts): split store/update in the account controller (#776 )
Víctor Falcón
2026-08-11 15:58:47 +0200
1553325c4f
refactor(settings): move the last two settings tables onto the shared table and hook (#775 )
Víctor Falcón
2026-08-11 15:54:18 +0200
9f767e8944
feat(landing): point the landing CTAs at the dashboard for signed-in visitors
Víctor Falcón
2026-08-11 15:49:37 +0200
89a744221c
refactor(accounts): split store/update and share the attribute mapping
Víctor Falcón
2026-08-11 15:14:41 +0200
6d74440c75
test(landing): assert a signed-in visitor stays on the landing page
Víctor Falcón
2026-08-11 15:46:09 +0200
a429512367
fix(settings): drop the table hook — the React Compiler breaks useReactTable in it
Víctor Falcón
2026-08-11 15:44:21 +0200
200283e32a
feat(landing): stop auto-redirecting signed-in visitors to the dashboard
Víctor Falcón
2026-08-11 15:37:51 +0200
c9a70ffa1a
feat(accounts): count shared accounts at the owner's percentage (#750 )
Víctor Falcón
2026-08-11 15:26:54 +0200
ed157f6f8a
refactor(frontend): call backend routes through Wayfinder instead of literal URLs (#772 )
Víctor Falcón
2026-08-11 15:26:10 +0200
0385c98615
refactor(accounts): extract the loan detail sync out of the update action
Víctor Falcón
2026-08-11 15:17:25 +0200
fa6f6e2be3
refactor(transactions): build the bulk selection once in bulkUpdate (#774 )
Víctor Falcón
2026-08-11 15:14:19 +0200
ede51ff601
test(accounts): onboard the shared-account test user
Víctor Falcón
2026-08-10 10:05:54 +0200
7e29789bfe
fix(accounts): harden the ownership share after review
Víctor Falcón
2026-08-10 09:47:49 +0200
890a59e750
feat(accounts): count shared accounts at the owner's percentage
Víctor Falcón
2026-08-10 09:32:22 +0200
6b441a0f02
refactor(inertia): group the shared user props and name the inline conditions (#773 )
Víctor Falcón
2026-08-11 15:09:55 +0200
3c4de4dfbd
refactor(settings): put the remaining two settings tables on the shared pieces
Víctor Falcón
2026-08-11 15:07:59 +0200
a28f922fdc
refactor(transactions): build the bulk selection once instead of twice
Víctor Falcón
2026-08-11 15:04:11 +0200
45b22a9fcc
refactor(inertia): group the user's collection props and name the demo/encryption conditions
Víctor Falcón
2026-08-11 14:59:37 +0200
a912fb2f45
refactor(transactions): split the category/label filter out of applyFilters (#771 )
Víctor Falcón
2026-08-11 14:58:59 +0200
219944564e
refactor(frontend): call backend routes through Wayfinder instead of literal URLs
Víctor Falcón
2026-08-11 14:56:08 +0200
4dbe4a247a
refactor(transactions): pull the category/label filter out of applyFilters
Víctor Falcón
2026-08-11 14:48:59 +0200
8d58e0bf81
refactor(settings): dedupe the categories and labels pages (#770 )
Víctor Falcón
2026-08-11 14:37:23 +0200
952ca41eb1
refactor(analytics): dedupe the two account balance evolution endpoints (#766 )
Víctor Falcón
2026-08-11 14:36:52 +0200
77d55f88df
refactor(mcp): dedupe record resolution and field updates in the write tools (#767 )
Víctor Falcón
2026-08-11 14:35:01 +0200
6a0c00dce8
refactor(landing): extract the scroll-progress hook every preview duplicated (#768 )
Víctor Falcón
2026-08-11 14:34:24 +0200
a190d37307
feat(deps): upgrade Inertia.js from v2 to v3 (#769 )
Víctor Falcón
2026-08-11 14:33:31 +0200
0ab4873286
refactor(settings): share the row actions and the table between the categories and labels pages
Víctor Falcón
2026-08-11 14:19:42 +0200
9934100f3d
chore(inertia): keep v3 DevTools request recording opt-in
Víctor Falcón
2026-08-11 13:57:30 +0200
bf875e152c
fix(mcp): pass the space-scoped query so phpstan can type the resolved model
Víctor Falcón
2026-08-11 13:56:31 +0200
97af319387
fix(analytics): drop the redundant nullsafe operator phpstan flagged
Víctor Falcón
2026-08-11 13:54:29 +0200
d41336c710
refactor(landing): extract the scroll-progress hook the previews all copied
Víctor Falcón
2026-08-11 13:52:27 +0200
89840e19db
refactor(mcp): give the write tools one way to resolve a record and to apply changed fields
Víctor Falcón
2026-08-11 13:44:47 +0200
f04e590268
feat(deps): upgrade Inertia to v3 on both adapters
Víctor Falcón
2026-08-11 13:44:00 +0200
acb34881d0
refactor(analytics): share the balance-series building blocks between both evolution endpoints
Víctor Falcón
2026-08-11 13:39:26 +0200
A Fortis Scientia site