Balances are entered by hand for now. When a bank feed is connected it writes into
these same rows — the page won't change, the numbers just stop needing you.
Spending
Transactions
Changing a category here marks the row fixed by hand, and no automatic
pass will touch it again — not a rule, not Claude, not transfer pairing. That
is the point: a correction that gets quietly undone on the next import is worse
than none, because you stop checking. Setting a row back to
— uncategorised — clears that lock and lets the free passes have another go.
Budget
month starts
· income/mo
Targets start as your own trailing median for that category — what a typical
month has actually cost you, not a number you guessed. Tap one to set your own;
clear it to go back to the measured figure.
Recurring
Found by looking for the same merchant at a steady interval — no Claude, no
cost, recalculated every load. Confirming one counts it as a fixed monthly
commitment; dismissing one stops it being suggested. Only your decision is
stored, so a price rise or a cancellation shows up on its own.
Import statementparsed in your browser
Export a CSV from your bank and drop it here. It's read locally and only the parsed
rows go to Supabase — the file itself is never uploaded anywhere. Re-importing the
same statement won't duplicate anything.
How ingestion works, cheapest and most certain first. Equal-and-opposite amounts in
different accounts within 3 days are paired as transfers — moving money between your
own accounts or paying a credit bill is never spending or income; the real spend is
the merchant rows on the card. Then your rules match what they match. Only what's
left over goes to Claude, and every answer it gives becomes a new rule, so a merchant
costs you once. Anything you fixed by hand in Transactions is left alone by all three.