Summary
Cumulative balance — predicted vs actual
Monthly income vs expenses (planned) & actual expenses
Expenses by category —
Month by month
| Month | Income (plan) | Expenses (plan) | Predicted net | Actual net | Variance | Predicted balance | Actual balance |
|---|
Edit a month — planned & actual
Copy actions copy recurring planned income/expenses only — one-offs are never copied. Changes save automatically. In the Actual view, expense fields for a month with daily-log entries come from the daily log rollup (see Daily expenses) and are shown read-only there.
Daily expenses
Add what you actually spent, each day. The category fills in automatically (Gemini when a key is set, otherwise keyword rules) and you can always override it. Each month's daily total rolls up into that month's actual expenses.
Settings
Gemini auto-categorization
Checking…
Two ways to configure the key: paste it here (stored only in the database, used only by the categorize function, and never displayed again — you'll see just its last 4 characters), or set the GEMINI_API_KEY secret on the Cloudflare Pages project, which takes precedence. Without any key, categories fall back to keyword rules. Never commit a key to git — see the README for how to get one and how to restrict it.
Your data
Export JSON (in the Month editor tab) downloads everything — plan, actuals, daily expenses and baseline. Import JSON restores it, saving through the database when in Database mode. The exported file is named budget-data.json and is git-ignored by design.