Summary
Off: this dashboard shows your actual income, expenses and savings only. On: actuals are compared with the plan (projected).
Cumulative balance — actual
Monthly income vs expenses — actual
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. Sharing an expense (roommate, friends)? Fill in My share with just your portion — actuals count only that; the split itself lives in Splitwise.
Credit cards — statement cycles
A credit card bill is due in a later month — and often a different paycheck — than the spending itself. Add each card with its statement start and end dates: expenses you tag with that card on the Daily expenses tab and that fall inside the statement window group here, and their total is the estimated statement balance for that cycle.
Add a card
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, credit cards and baseline. Import JSON restores it, saving through the database when in Database mode; older exports without cards still import fine. The exported file is named budget-data.json and is git-ignored by design.