Pathayam

Guides

How to actually use it

42 guides covering every screen in the app, in the order you will need them. Start at the top if it is your first day, or jump to whatever you are stuck on.

Getting started

Install and first run

Everything runs in Docker, so Node is not needed on your machine. Five minutes from nothing to a budget you can click around.

  1. Get the source. git clone https://github.com/flaxvin/Pathayam.git, then cd Pathayam. Everything below runs from there.
  2. Make a config file. cp .env.example .env. The defaults are fine for a first look.
  3. Seed a demo household. docker compose --profile seed up seed — two members, four accounts and a month of realistic behaviour including an overspend, so the screens have something true in them.
  4. Start it. docker compose --profile dev up, then open localhost:8080.
The purple banner means the development login bypass is on. It exists only in the development image, and the app refuses to start if it finds it anywhere production-shaped — a public hostname, real Google or OpenID Connect credentials, password sign-in (LOCAL_LOGIN), or NODE_ENV=production. You will never see it on a real deployment.

Going live

You need a domain, a way to sign in — Google, any OpenID Connect provider, or passwords with LOCAL_LOGIN — and somewhere to run one container. Set BASE_URL to your exact public origin — sign-in redirects and cookie scoping both depend on it being right — then docker compose up -d. Start from an empty budget rather than the seed.

It also decides which writes are accepted. A save, a delete or any other change addressed to a host other than BASE_URL's — another name, or the same name on another port — is refused with a 403, so a page somewhere else cannot point its own name at your machine and post to it. An IP address or localhost is accepted as well, so the app still works from its LAN address. Behind a reverse proxy, have the proxy pass the original Host header through, or send X-Forwarded-Host and set TRUST_PROXY; otherwise reading works and every save fails. Calls made with an API token are not affected.

The first person to sign in becomes a member. Everyone else has to be invited from Settings, and the allow-list is checked on every request rather than only at sign-in.

Add your accounts

Accounts come in three kinds, and picking the right one matters more than anything else you will do on this screen.

  • Budget accounts — current, savings, cash. Money here funds envelopes. The total across them is what you are allowed to budget.
  • Credit accounts — credit cards. Spending creates a debt and reserves the cash to clear it. See the cards guide.
  • Tracking accounts — a PPF, an EPF, a fixed deposit, anything you want on the net-worth figure but never want to budget from. A fixed or recurring deposit, a PPF or an EPF can also be given its terms, and then it values itself — see Give a deposit its terms.

Give each one its balance as of today. That balance becomes an opening transaction, so the arithmetic starts from a real number rather than zero.

Closing, not deleting

Accounts are closed rather than deleted, always. The history attached to them is real and other figures depend on it. A closed account disappears from the places you pick accounts and stays in the places you read history.

Accounts, grouped into budget, credit and tracking.
Accounts, grouped into budget, credit and tracking.

Set up categories

Categories are the envelopes. Groups hold categories. Start with fewer than you think — five or six — and add more when reality demands it rather than in advance.

A useful starting set: Rent, Groceries, Eating out, Transport, Bills, and one honest category called something like Stuff I forget.

Order is information

The arrows beside each category and group move them. This is not decoration: fund every target spends your money down the budget in exactly this order, so whatever sits at the top gets funded first and any shortfall lands at the bottom where you will notice it. Put the things that must happen above the things that would be nice.

Envelopes the app manages

Some categories are created and retired by the app itself — one per credit card for payments, and one per savings goal. They carry no manual controls and are marked managed by the app, so it is obvious why you cannot rename them.

Hiding and deleting

Hide a category you have stopped using and its history stays intact. Delete one only if it never had anything in it. One with history is merged into another instead, which carries its balance, transactions, rules and schedules across.

Categories with their targets and funding chips.
Categories with their targets and funding chips.

The monthly loop

Build your first budget

The rule is the whole method: you can only budget money you already have. Not money you expect, not next week's salary. What is in your budget accounts right now.

That number appears at the top as Ready to Assign. Your job is to get it to zero — not by spending, but by giving every rupee a job.

  1. Fund what will definitely happen. Rent, the loan instalment, the electricity bill.
  2. Fund what will probably happen. Groceries, transport, the things you spend on weekly.
  3. Fund what you would like to happen. Savings, the trip, the emergency fund. Whatever is left goes here.
Ready to Assign going negative means you have promised money you do not have. The app will keep saying so until you take some back from somewhere. That nagging is the feature.

Reading the grid

Three columns per category. Assigned is what you gave it this month. Activity is what happened — spending is negative. Available is what is left, and it is the only number that matters when you are standing in a shop.

The month grid: assigned, activity and available.
The month grid: assigned, activity and available.
A card charge, with the form that converts it into an instalment plan.
Converting a charge to EMI, from the transaction itself.

Assign, move and hold

Three different actions, and confusing them is the most common early mistake.

Assign

Moves money from Ready to Assign into a category. This is how the month gets budgeted. Ready to Assign falls.

Move

Moves money between two categories. Ready to Assign does not change — the total assigned is the same, it is just sitting somewhere else. This is how you cover an overspend, and it is not cheating. Eating out came out of the holiday fund, and now you know that. Both envelopes have to be in the same budget: money between two budgets is a transfer between their accounts, not a move.

Hold

Takes money out of this month's Ready to Assign and places it at the top of next month's. This is how you get a month ahead. See its own guide.

Fill from last month gives every empty category in the budget on screen what it was assigned last month, in one step, which makes a routine month about thirty seconds of work.
The month grid: assigned, activity and available.
The month grid: assigned, activity and available.

Targets and auto-assign

A target says what a category needs, so the app can tell you whether it has it. Rent needs ₹45,000 a month. An annual insurance premium needs ₹8,000 set aside each month so that in March it is simply there.

Three kinds are set on Categories: an amount each month, a level to refill up to — only the gap is asked for — or an amount by a date, spread over the months until then and asking nothing once that month has passed.

Each category shows its progress against the target as a chip — funded, partly funded, or not funded — so a glance down the grid tells you where the month stands.

Fund every target

Once targets are set, one tap does the monthly sit-down. You get a preview of exactly what would be assigned before anything commits. Money is spent down the budget in your order, so a thin month funds the top of the list and leaves the shortfall visible at the bottom.

This does not run automatically at rollover, and that is deliberate. The monthly sit-down is where you notice that groceries have crept up ₹2,000. An app that quietly did it for you is an app you stop reading.
Categories with their targets and funding chips.
Categories with their targets and funding chips.

Record what you spend

Add is in the header on every screen, and a opens it from anywhere. On a household with more than one person the form also asks who spent it, which follows the account — a card in somebody's name is attributed to them — and that name appears as a column in the register and in Query.

Add sits in the middle of the navigation on purpose. Recording a transaction should take about five seconds.

  • Amounts do arithmetic. Type 450+120 and it works it out — useful when you are splitting a bill at the table.
  • Money out must name a category. “I will sort it later” is how you end up with a queue of hundreds. Money in is exempt, because its job is to sit in Ready to Assign until you give it one.
  • Splits handle one receipt covering several envelopes — the supermarket run that was half groceries and half a birthday present.
  • Transfers between your own accounts are never spending and are never counted as such.
  • Owner records who spent it, which matters on a shared budget and on add-on cards.
  • Cleared means the bank has confirmed it. Leave it unticked until you have actually seen it on their record. A cleared entry dated inside a period you have already reconciled asks first, because saving it breaks that reconciliation.

With no signal

If there is no connection at all when you press Save, the Add form keeps the entry on this device rather than losing it, empties itself so you can carry on, and sends what it kept once the connection is back. While anything is waiting, a count shows at the top of every page, with Send now beside it.

  • Only the Add form, and only when the server cannot be reached. A server that answers with an error is not “no signal”, and the save is retried as before.
  • The app has to be open for it to send. There is no background worker; it tries again when a page loads, when the connection returns, and every thirty seconds while a page is on screen.
  • An entry that has waited almost a week is no longer sent on its own. Check it is not already in your transactions, then open it in the Add form to save it, or discard it.
  • Until it is sent it sits in the browser's storage, unencrypted, so anyone holding the unlocked phone could read it. Signing out clears it, and if somebody else signs in on that browser, anything left by another member is discarded unsent and the page says so.

Receipts

Attach a photo or a PDF to any transaction. It is stored in the database rather than on a disk somewhere, and served so that no device caches a copy.

When you go over

You will go over. The question a budgeting app has to answer honestly is what happens next, and there are two defensible answers. Choose one in Settings.

  • Reduce next month (the default) — the overage comes off next month's Ready to Assign and the category starts fresh at zero. Last month is closed and paid for.
  • Carry the negative — the category itself starts next month in the red and has to be dug out. Harsher, and some people want exactly that.

Whichever you pick, today's move is the same: cover it. Move money from another envelope. The app ranks suggestions by where there is most slack, so it takes one tap.

Switching models re-derives your entire history under the new one, as a single undoable step. Figures will change, which is correct — they were always the answer to a different question.

Converting a purchase to EMI

When the bank offers to split a big charge into instalments, open the transaction and say yes there. Only a charge converts — not a refund or a payment — and only once: a charge partly on a plan offers just the rest. The converted amount comes off the card's balance and becomes a loan with its own schedule and its own envelope — so you are not asked to clear it on the card and pay it monthly, which is the mistake worth avoiding. The processing fee and its GST are charged to the card like any purchase, so they need an envelope. Each instalment also posts 18% GST on that instalment's interest as its own card charge, the way the statement shows it, and the plan's envelope asks for it each month. The loan screen shows what the plan actually costs in interest, GST and fees.

Two details make the plans livable. Name it — the conversion form offers the payee as a suffix, so you get “HDFC EMI — Croma TV” rather than a column of identically-titled plans you have to open one by one. And whatever the card's payment envelope was already holding against that charge moves across to the new plan's envelope, because the money you set aside to clear the purchase is the money that now pays its instalments. Nothing is stranded and nothing is asked for twice.

On a household commitment it means something else

The envelope you use to commit money to the household can go red too, and it is not an overspend: it means more of the household's spending was paid out of your money than you put aside for it. The button says Put it down to me rather than Cover, because covering it forgives nobody anything — it decides your share this month was larger. Squaring up a month covers the other two ways it can end.

Overspending on a card is different

Cash overspending means you spent money you had not budgeted. Card overspending means you created a debt with nothing set aside to clear it, which is why the card shows an unfunded amount until you deal with it.

The month grid: assigned, activity and available.
The month grid: assigned, activity and available.

Close the month

Ten minutes, once a month. Nothing is locked and a closed month can be reopened, so this is a ritual rather than a gate.

It shows you four things, for the budget you are looking at and its money only:

  • What the month did — earned, spent, saved, the savings rate, and the biggest categories.
  • How your net worth moved, split into money saved, market movement, exchange rates and debt repaid — and, in a month they moved, other assets, money owed to family and other liabilities. Different reasons a number changed, separated, and they add up to the change.
  • A dated snapshot, so the history is something recorded rather than recalculated later from whatever the prices are now.
  • Whether next month is funded.
The app will remind you once the month is over and nobody has closed it, then stop mentioning it if you mute that kind of reminder.
Overview — runway, what is due, the month so far.
Overview — runway, what is due, the month so far.

Keeping money separate

Should you keep it separate?

Most households pool everything. If that is you, skip this part entirely — there is nothing to switch on, no second grid, and the app never mentions any of it.

This is for the other arrangement: we keep our own accounts and split the shared bills. Couples who came to it late, one salary and one irregular income, somebody supporting a parent out of their own money, or simply a preference. It is a legitimate way to run a household and most budgeting apps cannot do it at all.

What you get is a budget of your own — your accounts, your envelopes, your Ready to Assign — plus an agreed amount you put toward the shared bills each month. What you give up is nothing: the household budget works exactly as it did.

The important part is that money never moves to commit it. You do not transfer ₹40,000 to a joint account and then budget it twice. You assign it, and it stays in your account until something shared is actually paid for.

What the other person can see

How much you committed, and how much of it has gone out. That is all. Not your balances, not your accounts, not your other envelopes — not through any total, and not by subtracting one number from another.

The household page: what each of you put in, and where it stands.
What each of you put in, and where it stands.

Open a budget of your own

On the budget screen, + My own budget. It appears immediately with a few envelopes to start from and one more you did not create: the household envelope, which is how you put money toward the shared bills.

Then move your accounts into it. Open an account, Edit, and set Which budget this account funds to your own. That is the setting that changes the figures: the balance leaves the household's Ready to Assign and joins yours, and spending from the account lands in your envelopes.

Making an account private

Once an account is in your own budget you can set Who can see it to private, and nobody else sees the account or its balance at all.

Private only works in your own budget, and the app refuses it in the household's. The reason is arithmetic rather than policy: the household's Ready to Assign is the sum of every account in it, so a hidden one there could be worked out by subtracting the visible ones. Refusing is more honest than a promise the sums cannot keep.

Switching between them

The sidebar gains a Looking at section. Every screen that shows one budget's money — the grid, Overview, Cards, Schedules, Categories — follows it. Reports and Query are different: they ask whose money as a filter, because "what did we spend on groceries" and "what did I spend" are different questions.

Commit to the household

In your own budget there is an envelope called → Household. Assign to it and that money is committed: it shows up in the household's Ready to Assign for the two of you to assign to rent, groceries, whatever you have agreed.

No money moves. It is still in your account. That is the whole point, and it is what lets a private account fund shared spending without publishing its balance.

Set it once

On The household's money, set a monthly plan — ₹40,000 a month, say. It is an ordinary target, so the budget screen measures you against it and auto-assign fills it. Agreeing the figure once beats remembering it every month.

Unspent commitments roll over like any other envelope. Nothing expires at month end, and taking money back out is a deliberate move rather than something the app does for you — the household was counting on it.

Paying for shared things

Pay the rent from your own account and file it to the household's Rent envelope. Two things happen at once, and no transfer is involved:

  • The household's Rent envelope falls, because the rent is paid.
  • Your → Household envelope falls by the same amount, because that is the commitment being spent.

When you pick an envelope from another budget, the Add screen says so under the picker. It is the ordinary way to pay for shared things, not an error.

Shared cards and add-on cards

  • A shared card is one whose account sits in the household budget. Anybody may spend on it. The bill is paid from the card's own payment envelope, in the household's budget, however the spending was filed — so a shared card's payment is never split between you.
  • An add-on card — your card on somebody else's account — keeps the debt with the primary holder, because that is who the bank chases. Filing an add-on charge to your own envelope means you have used their credit, so the balance between you moves by that much.
  • Filing your money to the other person's envelope, with nothing shared between you, is refused. It would invent a balance neither of you arranged.

One receipt, two budgets

Split it. Half to the household's Groceries, half to your own Personal. Each line lands in its own budget and draws on the right money.

Squaring up a month

Some months one of you puts in more. The app does not call that a debt — you are not a creditor and your partner is not in default on the electricity. It says the commitment is underfunded: more has gone to the household than was put aside for it.

On The household's money, the row reads left to right and adds up: brought forward, plus what went in, less what went to the household, is where it stands. There are three ways to settle it, and they are genuinely different.

  • Put it down to me. Fund it from your own Ready to Assign. Your share this month was simply larger. Nothing is forgiven and nobody else is asked for anything.
  • I'll pick it up. The other of you commits the amount on top of what they already had, so it is funded from their budget instead.
  • Call it even. Nobody funds it. This is the only one that lets something go, so it is offered only to whoever is giving it up.
Calling it even still costs something, and the app shows where. It becomes spending on the side that gave it up — it needs an envelope, like anything else — and that budget's Ready to Assign pays for it. It is the household buying somebody a present, which is what happened. It never reduces what you pay the bank: the card bill is owed either way.

Closing the month

Each budget closes on its own. The household's month can close while yours is still open, and the other way round — one person's procrastination should not block the other's ritual. The household's close reports what each of you put in and how much went out.

When somebody leaves

Removing a member never deletes anything. Every transaction they entered keeps their name, the history stays exactly as it was, and adding the same email address back restores them — they pick up where they left off. Settings lists anybody removed with an Add back button, so it is one click either way.

What is not automatic is the money. If they kept a budget of their own there is usually a balance outstanding, and the app will not remove them until you say how it ends. It offers the options and never picks one.

  • They have money set aside and unspent. It is theirs — they promised it, and the promise ends with the arrangement. Giving it back is the only ending offered, because recording a debt here would invent one.
  • The household has had the use of their money. Either record it as money owed — which becomes ordinary family lending, with them as the counterparty, because they are outside the household now and that is exactly what family lending is for — or they call it even and let it go.
Whichever you pick, both sets of books still close. The balance does not evaporate because somebody left, and it does not sit somewhere with nobody attached to it.

Money coming in

Import statements and CSVs

Typing everything in by hand is how budgeting apps get abandoned. Three ways in, and all three land in the same queue rather than posting themselves.

Statement PDFs

Drop the file on the Import screen. Twelve banks are recognised from their own layouts — HDFC, ICICI, Axis, SBI, Union, Canara, YES, IndusInd, Kotak, RBL, HSBC and Standard Chartered — plus broker contract notes.

Most Indian statements are password-protected, and each bank has its own rule. The screen shows you that bank's hint. If you save your statement identity in Settings, the app derives the password itself and you never type one. A few banks need something more than name, date of birth, PAN and mobile: Axis and HDFC account statements use your customer ID, and HSBC the last six digits of the card, so those have their own boxes there. When a statement will not open because one of these is missing, the message says which detail and where to add it.

Every parse is verified against the statement's own closing balance. If the two disagree the app says so rather than quietly importing something wrong. On a real 848-row statement it reconciles to the paisa.

CSV

Paste it in. Headers are detected, Indian number formats are understood, and once you map a bank's columns the mapping is saved and used on its own next time. A file with separate Dr / Cr markers, or one that marks only its credits, is signed from them. Dates are read day first unless the file proves month first; when every day in it is 12 or under and it cannot, the mapping screen asks How are the dates written?

Coming from YNAB or Actual Budget

Paste the transaction export from either app on the same CSV screen and it is recognised from its header row. One file covers every account you had there, so the next screen asks which of your accounts each one is, or to leave it out. The rows land in Review like any import: transfers between two accounts you brought across arrive as transfers, splits stay split, and envelopes are matched by name where one exists. Only transactions come across — the other app's budget assignments were worked out against its own balances and months, and are never imported.

Undoing an import

Any import can be reversed in one step from the import log, taking every row it created with it — except rows you have edited since, which are left alone and counted. Worth knowing before your first attempt, because it makes experimenting safe.

Import — paste a CSV or drop a statement PDF.
Import — paste a CSV or drop a statement PDF.

The review queue

Nothing posts itself. Everything imported waits here with its raw text beside it, so you can always see exactly what the bank said rather than only what the app made of it.

  • Uncategorised spending — file it. If you have filed that payee before, the category is offered as a single tap rather than a dropdown to hunt through.
  • Possible duplicates — the same purchase arriving twice, once from an alert and once from the statement. Five separate tiers of matching decide how confident the app is; you merge or keep both.
  • Overspent categories and unfunded cards — the two things most worth acting on, so they are here rather than only on the budget screen.
  • Own transfers and card payments — an imported row that is money moving between your own accounts is filed as a transfer to or from the other account, not as spending. If that account's side is also waiting, it becomes the other leg.
  • Proposed rules — see the next guide.
  • Money you are owed — anything marked reimbursable stays listed until it comes back.
Uncategorised income never appears here. In an envelope budget, income's job is to arrive in Ready to Assign and wait to be given one, which the app has already done correctly — asking you to categorise it would be asking you to answer a question it already answered.
The review queue, with the raw imported text kept.
The review queue, with the raw imported text kept.

Rules and automatic filing

File the same payee twice and the app proposes a rule, stating exactly what it inferred and from which transactions. It never applies one on its own.

Confirm a rule and you are offered the chance to apply it to your existing history, with a preview of every transaction that would change before anything does. It only touches rows you can see and could file by hand — split rows, transfers and anything in another member's private envelopes are left as they are — and the whole apply undoes as one step.

Writing one yourself

A rule matches one thing — the merchant, the bank's whole description, the UPI address, the channel, the imported payee, the amount in rupees, or the card's last four digits — and files what it matches into an envelope. Try it on my history shows what it would change among the transactions you can see, before you save it.

Why it learns from filing rather than importing

Filing counts wherever it happens — from the review queue, from the transaction screen, from anywhere. That matters more than it sounds: an app that only learned from imports would watch you categorise the same delivery service a hundred and thirty times and never once offer to help.

The review queue, with the raw imported text kept.
The review queue, with the raw imported text kept.

Bank alerts by email

Optional, read-only, and off until you turn it on. Once connected, Fetch now in Settings turns every new bank alert into a queued row, which is as close to live as a budget gets without a bank integration.

  • It reads only the banks' own sending addresses, never the rest of your mail.
  • Access is read-only. Nothing is sent, labelled, or deleted.
  • You connect your own Google project, so the credentials and the consent are yours rather than a third party's.
  • Disconnecting revokes the token and deletes the stored access.
  • An alert is filed to the account or card whose last four digits it names, among only the ones the member whose mailbox it came from can see. If two still match it is left for you rather than guessed, and an alert that reads like a transaction but cannot be parsed is counted in the fetch's summary, so you can add it by hand.

Statement emails too

When a bank sends the monthly statement as an attachment, it is fetched, decrypted using your saved identity, parsed and queued — the whole chain, without you opening the mail. A statement it cannot open because your identity is missing a detail is named in the fetch's summary, with what it needs — an Axis or HDFC customer ID, a card's last four, an HSBC card's last six — so the fix is one box in Settings.

Add-on card alerts arrive in the primary holder's inbox but greet the cardholder by name. The parser carries that name through so the transaction can be attributed to the right person rather than the account holder.
Settings — members, identity, connections, tokens.
Settings — members, identity, connections, tokens.

Cards and debt

Credit cards

Set the statement day and the due day when you add the card, or from Edit afterwards. They do different jobs: the due day projects the payment onto the cashflow calendar, and the statement day tags every charge on the register with the cycle it bills in — a cycle runs from the day after one statement up to and including the next, so a charge on the 19th with a statement day of 18 bills the following month. Both clamp to the last day in a month too short to have theirs.

This is where most budgeting apps get vague, so it is worth two minutes. Spending on a card is still spending.

Buy groceries on a card and two things happen at once: the Groceries envelope goes down by the amount, and the same amount moves into that card's payment envelope. The cash to clear the bill is reserved the moment the charge lands, so the statement is never a surprise.

The Cards screen

Every credit account in the order it falls due, with a summary strip across the top: total owed, total not funded, and how many fall due within a week.

  1. Look at what is unfunded. That is balance with no envelope behind it — usually an overspend, or a charge nobody has filed yet.
  2. Fund it from another envelope, using the same cover flow as an overspend.
  3. Record the payment as a transfer from a bank account to the card — Pay it off opens one with what the card owes filled in. The payment envelope empties, the balance clears, and no category is involved — the categories were charged when you spent.
Record a statement — amount, date, due date, minimum — and the card starts showing real due dates instead of “whatever the bank says”.

Add-on cards

A second card on someone else's account shares one limit, one statement and one payment. Add it as a card on that account rather than as an account of its own, and every transaction still records which card it was and whose.

Cards, in the order they fall due.
Cards, in the order they fall due.

Loans

Add a loan with its principal, rate and tenure. The one thing to get right is the interest model.

A rate quoted “flat” is not what it sounds like. Flat interest is charged on the original principal for the whole tenure, even as you pay it down. The app shows the equivalent reducing rate beside it, which is usually close to double the quoted number. Personal and gold loans are frequently quoted this way.

Instalments

Record each instalment with the lender's own principal and interest split rather than the app's projection — give one half and the other is whatever is left of the payment. Where the two disagree, that is drift, and it is surfaced rather than silently absorbed — the app projects, the lender reconciles, and when they differ you want to know.

Pay it from the account the lender actually debits. A bank EMI leaves a bank account. A card EMI is a charge on the card, not a transfer out of savings — so recording one against a credit account posts a categorised charge the way the statement will show it, and the card balance rises by the instalment before the loan balance falls by the principal. Anything else would have the money leaving twice. The 18% GST on the instalment's interest is posted with it as a separate card charge, because the issuer bills it separately.

Its envelope funds itself

Every loan gets a payment envelope, and its monthly target is set to the EMI the moment the loan exists — you do not have to remember to set one, and a rate change or a fresh disbursement moves the target with it, and closing the loan releases it. The EMI is the least negotiable number in your month; it should not be the one you forgot to budget for.

Settling early

When the loan is paid off, the page says so and offers to close it; a loan that still owes money is settled rather than closed. You can also settle before term: enter what you are paying and the foreclosure charge the lender wants for the privilege, along with the account it comes out of and the envelope it spends from. Most lenders charge to be repaid early — a percentage on a personal loan, a flat fee on a card plan — and a prepayment decision taken without it is taken against a saving larger than the one actually on offer.

Before you prepay

Use the calculator. It puts reduce the tenure against reduce the EMI side by side and tells you what each saves. Reducing tenure almost always saves more — on a worked ₹50 lakh example it is several lakh more — and the app shows the figure rather than asking you to take that on faith.

Pick the column, and that is what happens. Choosing to reduce the tenure holds your instalment where it is and shortens the loan; choosing to reduce the EMI keeps the closure date and lowers the monthly bill. Say which envelope the lump sum comes out of, too, from the budget the loan is paid from — a prepayment is the largest single thing most households will ever pay, and it has to leave a named envelope like everything else rather than being conjured.

When the rate resets

A repo-linked loan resets several times a year, and your lender has to offer you two ways to take it: keep the instalment and let the tenure move, or keep the tenure and let the instalment move. Enter the new rate, press work out what it does, and the app prices both against your actual balance — the new instalment, and how many months you would add or save. Then choose one, and it is applied: the loan's envelope is re-targeted either way, so next month's budget asks for the right figure without you rewriting it. For a rate change dated ahead, keeping the instalment is refused until the new rate applies — record it then, or keep the tenure.

A rate rise you absorb in the tenure is not free. The instalment stays comfortable and the loan runs longer, which costs more interest in total. Both figures are on the screen before you pick, which is the point of the screen.

Whose loan it is

A loan belongs to a budget like everything else, and a personal one can be marked private — then only its holder sees it, on the list, in Everything you owe, and in net worth. A household loan is visible to everyone in the household, which is the point of it being household. The owner is shown on the list, not just buried in the detail page, so you can tell at a glance whose debt you are looking at.

Disbursements

A loan paid out in tranches records each one with its destination. A builder-paid tranche raises the liability without ever touching your budget; a personal loan landing in your savings arrives as money you can assign.

Loans — real cost, schedule and drift.
Loans — real cost, schedule and drift.
One loan: where it stands, how it pays down, every instalment recorded.
One loan — where it stands, and every instalment against the lender's own split.
A rate change, with both options the lender must offer priced side by side.
A rate reset: keep the instalment, or keep the tenure. Pick one and it is applied.
The prepayment comparison: reduce the tenure against reduce the EMI.
What a prepayment buys, before you commit a rupee.
A loan's balance falling to zero over its schedule.
A loan's balance falling to zero over its schedule.

Lending to family

Money lent to or borrowed from a person rather than an institution, tracked without pretending it is a bank loan.

  • Advances and repayments are recorded as they happen, and the balance is derived rather than typed.
  • The other side is a name, not a member of your household — which is almost always the case.
  • Write-off exists, because sometimes that is what happened, and an app that cannot record it makes you lie to it.
  • Closing needs a nil balance. While money is owed either way, record the repayment or write it off first.

Outstanding amounts stay on the lending screen and in net worth so they do not quietly become gifts.

Making sense of it

Overview and runway

The screen to open when you want the month in one glance rather than in detail.

  • Runway — how many days of typical spending your money covers, measured against what you actually spend rather than a guess.
  • Due soon — bills and card payments approaching, with whether they are funded.
  • The month so far — in against out, and where it went.
  • Insights — a category well above its own three-month average, a subscription about to renew, a spare month sitting unassigned.
Spending figures here include card spending. That sounds obvious and is the single most common way a budgeting app misleads you: a headline that counts only bank accounts can understate a card-heavy household by twenty times.
Overview — runway, what is due, the month so far.
Overview — runway, what is due, the month so far.

Reports

Four reports, all rendered on the server as plain SVG. No charting library, and nothing about your figures leaves the machine to be drawn.

  • Income against spending by month, with a net-saved line, so you can see whether the gap is widening or you just had one good month.
  • Category trends over time — the report that catches groceries drifting up ₹500 a month for a year.
  • Loan interest by financial year, April to March: the interest actually paid, across every loan. The tax estimate does not use it. Its home-loan figure is the interest accrued in the year on loans marked as for a house, which is what section 24(b) allows, so the two can differ.
  • Realised gains by financial year, split by how long each parcel was held. It reports the holding period and names no tax category, because which threshold applies depends on the asset and that year's rules — a judgement that belongs to whoever files.
Reports — income against spending, by month.
Reports — income against spending, by month.
Grouped bars with a net-saved line.
Grouped bars with a net-saved line.

Query and export

If anybody keeps a separate budget, Query and Reports both ask whose money, defaulting to everything. "What did we spend on groceries", "what did I spend" and "what did all of it come to" are three different questions, so the app offers all three rather than picking one. A transaction that crosses budgets — your money paying for something shared — counts under both, because which one somebody means depends on what they asked.

One filterable, groupable table that every other screen drills into. Filter by period, category, account or whose money, and search the text; group by category, payee, account, owner, month or tag.

The totals cover every row that matched, not the rows rendered on screen. The table shows a page and says how many matched, and the CSV export carries the same uncapped figures. A total that silently described only the visible page would be worse than no total at all.

Search

Search runs across the cleaned payee name, the memo, the envelope, tags and the raw imported narration. When you half-remember a transaction as “something with ZEPTO in it”, the raw string is what finds it.

Getting everything out

The full export is one file in an open format containing every account, transaction, assignment, lot, loan and event you can see — another member's private accounts and envelopes stay out of yours. Deliberately excluded, and asserted absent by tests: your statement identity and any connected mail token.

Every CSV the app writes marks a text cell that starts with =, +, - or @ with a leading apostrophe, so a narration a stranger wrote opens in a spreadsheet as text rather than running as a formula. Plain numbers are left alone, so amounts still add up.

Query — filter, group, and export what matched.
Query — filter, group, and export what matched.

Print a report

Some pages are meant for paper, or for a PDF you send to whoever does your taxes. The tax estimate, Reports, the month close, net worth and a loan's page (its whole schedule) carry a Print button. It opens the browser's own print dialog, so Save as PDF is there too, and the browser's Print menu does the same thing on any page.

  • It prints as a document, not a screenshot of the app: black on white whatever your theme, with navigation, buttons and forms left off. The tax estimate is the exception — its inputs print as values, because the estimate is arithmetic on them.
  • Tables keep their headings on every page, short cards and rows are not split across pages, and collapsed sections print open.
  • A footer names the household, the screen and the date, and on the tax estimate repeats that it is an estimate, not a return, and not advice.
There is no generated PDF and no letterhead. Page breaks are the browser's best effort, and page numbers need a browser that supports them; current Chrome and Edge do.

Schedules and cashflow

Recurring things — rent, EMIs, subscriptions, a transfer on the 25th — recorded once and then expected. One can fall on a weekday rather than a date, such as the second Saturday or the last Friday of the month.

  • Detection. The app notices something arriving monthly and offers to make it a schedule rather than waiting for you to think of it.
  • The calendar projects your balance forward, so the question “will I make it to the 30th?” has an answer rather than a feeling.
  • Dips below your floor are flagged in advance, which is the entire point of projecting at all.
  • Subscriptions are listed with annualised cost, because ₹149 a month is ₹1,788 a year and the second number is the one that changes minds.
  • Money coming in is a schedule too. A salary on the 1st, rent from a tenant, a quarterly dividend — put them in and the calendar stops asking you to survive to the 30th on the balance you have today.

Every outgoing schedule names an envelope

You cannot save a payment that spends from nowhere. A schedule is a promise about money leaving, and a promise with no envelope behind it is the thing zero-based budgeting exists to prevent — so the app asks which envelope before it will take it. Incoming schedules need no envelope, because money arriving is assigned when it arrives, not before.

Arrived, paid, skipped

When a scheduled thing happens, mark it. Paid and Arrived record the transaction for you — the right amount, the right account, the right envelope — and roll the schedule to its next date. Nothing is recorded until you mark it. Skip rolls it forward without recording anything, for the month the gym was closed or the tenant paid late. The projection redraws immediately either way.

Changing one

Schedules can be edited and deleted. The rent went up, the subscription moved to annual, the standing instruction was cancelled — open it, change it, and the calendar reflects it the moment you save. Deleting a schedule leaves every transaction it already recorded alone; it only stops the app expecting more. Merging away the envelope a schedule spends from takes the schedule along to the one that remains.

Schedules and the forward cashflow calendar.
Schedules and the forward cashflow calendar.
Sixty days of projected balance.
Sixty days of projected balance.

Savings goals

Each goal gets its own envelope, created and kept in step by the app, so its progress measures money put aside for that goal and nothing else. If anybody keeps a budget of their own, you also choose at creation whether the goal is shared or yours — and that cannot be changed afterwards, because a goal is measured by its envelope's balance and moving it between budgets would change what the months you have been watching meant.

Long-horizon saving kept deliberately off the monthly grid, so a three-year goal does not clutter the screen you look at every week.

Each goal has a target amount and optionally a date. The app works out what that means per month, shows progress as a ring, and tells you whether you are on track or what you would have to raise it to.

When a goal is reached, completing it offers three endings: Spend it leaves the money in the envelope for the thing you saved for, Back to Ready to Assign returns the balance to be given another job, and Roll into a new goal starts the next one on the same envelope with what is already there.

Each goal gets its own envelope, created and retired by the app. Money in it is really assigned — a goal is not a wish, it is money you have already set aside and can see.
Goals, drawn as progress rings.
Goals, drawn as progress rings.
A goal against its target date.
A goal against its target date.

Investments and net worth

Portfolio

Holdings are tracked as units with FIFO lots, never as a rupee balance. That is what makes cost basis, the realised-versus-unrealised split and a real return figure possible at all.

  • XIRR is the headline return, not a naive percentage — it accounts for money going in at different times, and dividends coming back, which is how anyone actually invests.
  • Buying more joins the holding you have. A second purchase of the same instrument — from Buy more, the search, or typed by the same name — adds a lot to it rather than starting another.
  • Foreign holdings are bought and sold at that day's exchange rate, so what left the bank is what the cost says.
  • Every price carries its date, so a stale figure is visible as stale rather than passing as current.
  • Selling shows a preview naming the exact lots it will consume before you confirm.
  • Splits and bonus issues are recorded as events, once for the instrument, so every holding of it changes together — only the lots bought before the date — without the history becoming wrong.

Getting holdings in

The monthly consolidated statement is the primary route: it already covers every fund folio and demat holding, and rows reconcile against lots you already have rather than duplicating them. Prices for funds and currencies refresh on their own.

Holdings as units, with XIRR.
Holdings as units, with XIRR.

Hand-valued assets

Gold, a retirement account, property, anything that does not arrive in a consolidated statement. These need you to say what they are worth, and the app makes that one sitting rather than a hunt.

The valuations screen lists every hand-valued pot at once with what it was last worth and when. Fill in the ones you know, leave the rest blank, save.

Something never valued still appears, marked no value yet with a prompt to say what it is worth. An asset that vanished until you valued it would disappear at exactly the moment it most needed the reminder.

Anything not valued recently is flagged, so a gold holding last priced eight months ago cannot quietly hold up your net worth.

A deposit with its terms is listed too, but you do not have to value it: it is marked computed from terms and its figure is worked out for today. Type a passbook figure and it is marked valued by hand instead, and that figure stands until the next contribution or a change to the terms hands it back to the arithmetic. See Give a deposit its terms.

Every hand-valued pot, in one sitting.
Every hand-valued pot, in one sitting.

Allocation

Where your money actually sits, by asset class, by geography and by currency — three donut charts, drawn on the server. Deposits and hand-valued assets count alongside what the portfolio holds.

Instruments are classified once and remembered. The point of the screen is the gap between what you believe your allocation is and what it is, which is usually larger than expected and always more equity than people think.

Allocation by class, region and currency.
Allocation by class, region and currency.
The three allocation donuts.
The three allocation donuts.

Net worth

The figure, with the date it is as of, and a history you can see the shape of.

The change over any period is broken into its parts, which is what makes it useful rather than merely satisfying. The parts add up to the change, so nothing is left unexplained:

  • Money saved — what you actually put aside
  • Market movement — what prices did
  • Exchange rate — what the rupee did, kept separate from the asset's own gain
  • Debt repaid — principal cleared on cards and loans; the quiet one, and often the biggest
  • Other assets — hand-valued assets revalued, deposits grown, money lent
  • Owed to family repaid and other liabilities repaid — less owed on each

A part that did not move is left out. Snapshots taken before money owed to family and other liabilities were recorded did not keep them, so a period that starts that far back shows one more line, Other (not recorded before the date), for the difference — rather than a total its parts do not reach.

None of this appears on the budget screen, in any form, by design. A good month in the market is not income and must never be assignable. That rule is enforced by a test rather than by good intentions.
Net worth, with the change over the period broken into its parts.
Net worth, and every part of the change.

Financial independence

How much you would need to stop earning, how far along you are, and how long the rest takes at a return you choose.

The target is your own spending, not a rule of thumb: money that left your envelopes over the last year, annualised, divided by the withdrawal rate. A card swipe counts on the day you make it, and paying the card off afterwards does not count again.

What counts towards it is narrower than net worth, deliberately:

  • Counted — bank balances, investments, deposits, commodities
  • Held apart — EPF and NPS, which are real money you cannot reach before 58–60
  • Not counted — the flat, the car, money someone owes you. Each is listed with the reason, so the gap against net worth is visible rather than mysterious
No further earnings are assumed. The corpus grows on its own return and nothing else — no salary, no continued saving. It answers “when is what I already hold enough”, not “when could I stop if I keep saving at this rate for twenty years”. Keep saving and you arrive earlier than the date shown, which is the direction an estimate about the rest of your life should be wrong in.

If you give it your age it also reports the bridge: the years between stopping and the provident fund unlocking, and whether the drawable corpus alone covers them. A plan that counts EPF towards the target can still fail here — the money is real, it just arrives too late.

The default withdrawal rate is 3.5%, not 4%. The familiar figure comes from US data over a 30-year retirement. Indian inflation has run higher and retiring early asks the money to last longer, so the cautious number is the default and the 4% answer is shown beside it rather than hidden. It is a projection on assumptions you set, not advice, and it cannot know what markets will do.
Financial independence: what you would need, what you hold, and how far away it is.
What you would need, what you hold, and how long the rest takes.

Tax estimate

What the year looks like under each regime, side by side, so the choice is a number rather than a guess.

It models the old regime's deductions — 80C, 80D, and the HRA exemption, which is the least of three figures and the one people most often get wrong (paying no rent exempts nothing, however much HRA was received). The new regime ignores all of them, which is exactly the trade the comparison is showing you.

If you keep an insurance register, the page offers what the premiums of your own policies come to for the year under 80C and 80D. Use these figures raises each box to the policies' figure, never lowers one, and saves nothing until you press Save.

Home loan interest, section 24(b)

On a home loan's page, say what the house is: lived in by its owner or let out. For a house you live in, the interest accrued in the financial year — each instalment's interest spread over the days it pays for, with instalments not yet recorded taken from the schedule — goes into the holder's old regime estimate, capped at ₹2,00,000 across every such house. The new regime allows none. A let-out house's interest is shown and not deducted, because the rent it is set against is not something the app knows. The lender's interest certificate is the number for the return; type it in Your own figure, if different and it is used instead.

Tax already paid

Enter the year's TDS as one figure, from Form 16 or 26AS — nothing is read from either — and each advance or self-assessment tax challan with its date. Each regime's estimate, less all three, is shown as a balance to pay or a refund.

Where the year's tax under the lower regime, less TDS, is ₹10,000 or more, the four advance tax instalments are shown — 15%, 45%, 75% and 100% of it by 15 June, 15 September, 15 December and 15 March — with what you had paid by each date and any shortfall. Paying late or short costs interest under 234B and 234C; the screen names them and does not work them out. Nothing is scheduled or reminded.

An estimate, not a return, and not advice. It is arithmetic on figures you enter. It files nothing and it is not a substitute for an accountant. The screen lists what it leaves out — marginal relief, losses set off or carried forward, interest under 234A, 234B and 234C, TDS line by line, foreign income, presumptive schemes — because an estimate that hides what it ignores is one that gets trusted too far.

Slabs are carried as data for each financial year, not baked into the code. A year the app does not have rates for is refused rather than computed with the previous year's, since applying last February's rules to this year produces a confident wrong answer. The health page tells you when the rates have fallen behind the current year.

Capital gains are included, at the rates that actually apply to them rather than at your slab rate: 12.5% above the ₹1,25,000 annual exemption on listed equity held over a year, 20% on listed equity held less, 12.5% on gold, property or foreign shares held over two years, 12.5% on a listed bond held over a year, and slab rates on debt, on an unlisted bond (or one not marked listed), and on those held less. Listed equity bought before 1 February 2018 is costed at its 31 January 2018 price where that is higher, as the Act allows. A gain counts only in the estimate of the member whose account it is in. The holding period that divides long from short is twelve months for equity and twenty-four for most else, which is why they are separated rather than totalled.

FY 2024-25 is split at 23-07-2024, the day the rates changed: a sale before it is taxed at the old rates (15%, 10%, and 20% with indexation), one from it at the new. A long-held gain before the date that would need indexation is reported as not computed, because the app does not carry the cost inflation index and will not invent one.

It will not guess a rate. A fund with no asset class set, a hybrid fund, a sale whose lots were never recorded, listed equity from before February 2018 with no price for 31 January 2018, or an account that names no holder in a household of more than one are left out of the computation and listed on the screen for you to resolve — because putting a gain in the wrong column means taxing it at the wrong rate.
The tax estimate: both regimes side by side, with the working for each.
Both regimes side by side, with the working.

Keep an insurance register

Insurance is one list of what the household is insured for, what it costs and when it is next due. Record a policy with its insurer, kind, premium and how often it is paid, and optionally the cover, the dates, who it covers, the nominee and the envelope it is usually paid from.

  • Due dates come to you. A premium or renewal falling due shows on the Overview's Due soon, and the register heads the list with what the policies in force cost a year in regular premiums.
  • Paid moves the date on by the policy's frequency and posts nothing. The payment is recorded where all money is, from the Add form, so it is never counted twice.
  • Lapsed and ended policies are kept, listed apart with nothing due on them, because a term policy that lapsed is worth remembering.
  • 80C and 80D. Mark a policy as counting toward 80C, or 80D for yourself and family or for parents, and whether it covers a senior citizen. The tax estimate then suggests what your own policies' premiums come to for the year.
  • A policy can be private, like an account, and is then seen only by its holder.
Only the last four characters of the policy number are kept. They are enough to tell two policies apart and to match a premium notice. The whole number is what an insurer asks for to change a nominee or make a claim, and it is safer on the policy document than in a database whose export travels.
The insurance register: policies in force with their next due dates, and a lapsed one listed apart.
Policies in force, and the lapsed ones kept apart.

Gold, property, and anything valued by hand

Four things happen to a pot of gold, and the app records all four: you buy it, you buy more, you revalue it, and you sell some or all of it.

Buying or adding asks where the money came from. Leave it blank if you already owned the thing — recording a flat you have lived in for years moves no money. Say where, and the payment is recorded leaving that account, because otherwise net worth rises by the value of the asset with nothing on the other side, which is the one thing a ledger must never do quietly.

Selling asks what is left. Zero closes the account; anything else keeps it open at that value, because selling a few grams is the ordinary case and should not mean closing the account and starting again.

Its history is on its own account page. That account has no transactions and never will — its worth is stated, not counted — so where a register would be, you get every valuation it has ever had, with the change between each: Added ₹50,000, Revalued, Sold part for ₹80,000. Nothing is overwritten. A correction is another entry.

A fixed or recurring deposit without terms is different, and deliberately so. It is worth its balance, so interest credited to it is a transaction like any other and the balance moves with it. That is why revaluing is not offered on one: a stated figure would override the balance and silently stop the interest counting. Give it its terms instead and it values itself, and then Revalue is offered — see the next guide.

Give a deposit its terms

A fixed or recurring deposit, a PPF or an EPF does not need a figure typed in every few months. Give it its terms and it is worth what they make it on any day — net worth, allocation, FIRE, the portfolio and the valuations screen all read that figure.

  1. Open the account. It has to be a tracking account — a fixed deposit, recurring deposit or other asset. You can also give the terms when creating one, under A deposit? Give its terms on the accounts form.
  2. Fill in the terms under Deposit terms: the kind, the principal (or an RD's monthly instalment), the annual rate, how it compounds, the start date, the maturity date if it has one, and whether the interest stays in or is paid out.
  3. Value it from these terms. The card then shows what it is worth today, marked computed from terms. ₹1,00,000 at 7% compounded quarterly is ₹1,07,185.90 a year later.

A PPF or EPF also reads its register: every transaction from the start date is a contribution, and interest is credited each 31 March as the scheme does it. Interest that is paid out leaves a deposit worth its principal.

When you know better

A passbook or an interest certificate beats the arithmetic. Revalue the account, or fill it in on the valuations screen, and a figure dated on or after the computed one's basis — the last time the terms were saved, the start, or the last contribution — wins, marked valued by hand. The next contribution or a change to the terms hands it back.

Maturity

The maturity date and amount show on the account page, on the cashflow calendar on Schedules (beside the projected balance, not in it — the money is in the deposit until it is moved), and on the Overview's Due soon in its last two weeks. Nothing is posted for you: record the money where it lands, then close the account, or set new terms if it was renewed. No interest is assumed after maturity.

Each change to the terms is one entry in Activity and undoes from there. A private deposit's terms and maturity are seen only by its holder. A retirement balance created in Portfolio cannot take terms; track a PPF or EPF you want computed as an Other asset tracking account instead.
A fixed deposit's account page: its terms, what they make it worth today, and its maturity.
A fixed deposit valued from its terms, with its maturity.

Running it

Activity and undo

Every change ever made, newest first, with the undo beside it. Thirty days.

The log is append-only and the undo is itself an entry — nothing is edited away or deleted, so the record of what happened stays true even after you reverse it.

  • Where a later change touched the same record, the undo tells you what it would discard before it does anything.
  • Where the record is load-bearing — a loan instalment, a portfolio lot — it refuses outright and says what depends on it.
  • Where it would move a reconciled balance, it asks first, and undoing breaks that reconciliation.
  • Imports undo as a batch, taking every row they created except ones edited since.

Explain this number

Ready to Assign and every category balance carry an explain link. Ready to Assign's breaks the figure into income received, what is assigned this month and earlier and in future months, what is held, and cash overspending carried in; a category's lists this month's assignments and transactions in it, in order. When a figure is not what you expected, this is the fastest route to why.

Activity — every change, with its undo.
Activity — every change, with its undo.

Backups and health

Your data is one SQLite file. Back that up and you have backed up everything.

The scheduled job does more than copy. It restores the latest backup into a scratch database and compares control totals against the live one. A backup nobody has ever restored is a hope, not a backup — so the app checks, and tells you when it last succeeded.

The Health screen

The one to open at 2am: backup status, last verified restore, price-feed health and remaining quota, feature flags, error counts, and whether the development bypass is present. Every check shows its state, when it last ran, and a plain-language reason.

Restoring

Use the restore command rather than copying a file over the database by hand. Copying leaves the database's write-ahead journal behind, and the first query then reports the database as malformed — turning a recoverable afternoon into a lost ledger at exactly the wrong moment. The command lists what is available, keeps what it replaced, and reads the restored copy back before claiming success.

Health — backups, restore verification, feeds.
Health — backups, restore verification, feeds.

Settings, members and tokens

Everything that configures the household rather than the month.

  • Members — the allow-list. Invite by email address; they sign in with that address, through Google, your OpenID Connect provider or a password. Removing someone keeps their historical attributions and stops their API tokens.
  • Password — set or change your own. Changing one asks for the current password and signs your other devices out.
  • Overspend model — the choice described in the overspend guide. Changing it re-derives your history.
  • Statement identity — name, PAN, date of birth, mobile, and where your banks need them an Axis or HDFC customer ID and an HSBC card's last six digits, used to derive statement passwords. Customer IDs are shown masked. Never exported, never logged, and asserted absent from exports by tests.
  • Notifications — each kind of digest item can be muted individually, per member.
  • Theme — light, dark, or follow the system, stored server-side so the first paint is already correct.
  • Devices — every signed-in session, revocable one at a time. A session lasts SESSION_DAYS (30 by default) from sign-in, however much it is used. It must be a whole number from 1 to 3650; anything else stops the app at startup with a message saying so.
  • API tokens — scoped read or read-write, shown once, and unable to sign in, mint more tokens, set a password, sign devices out or link a mailbox. None can be minted while viewing as another member. See the API reference.
  • Feature flags — turn off loans, assets or multi-currency entirely and they vanish from navigation and reports rather than sitting greyed out.

Viewing as another member

Read-only by default, always logged, and shown as a banner on every screen while it is active. Writes require an explicit toggle within the session.

Settings — members, identity, connections, tokens.
Settings — members, identity, connections, tokens.

Groups and tidying the grid

A group is the heading envelopes sit under. On Categories you can rename one in place, reorder it, and delete it once it is empty.

Deleting needs it empty, and that is deliberate. Deleting the envelopes with it would destroy balances and history at one click; leaving them behind would put money in envelopes no screen renders. Move them out first — it is one change per envelope, and each is a decision worth making.

The ones the app keeps

Credit card payments, loan payments and Goals are marked managed by the app. They hold envelopes the app creates and retires alongside the card, loan or goal they belong to, so they carry no manual controls and cannot be deleted by hand — they go when the last of those does.

A budget of your own starts with a few

Opening a personal budget gives you two groups and four envelopes to start from, plus the household one. Rename or delete any of them; they are ordinary.

When something looks wrong

A number is not what I expected

Use the explain link beside it. It breaks the figure down, or lists what changed it in order, which resolves nearly all of these in under a minute.

A past month reads lower than it did at the time

Known, and written down rather than hidden. Opening July in December subtracts assignments made since. The budget is a live document rather than a series of monthly photographs, and this is the price of that.

My card shows an unfunded amount I do not understand

Something was spent on the card without an envelope behind it. Usually a charge still sitting unfiled in the review queue, or a genuine overspend. Filing it or covering it clears the warning.

An import brought in the wrong things

Undo the batch from the import log; every row it created goes with it, except any you have edited since. Then check the column mapping — and, for a CSV, how the dates are written — and try again.

The same purchase is in there twice

The review queue's duplicate tier should have caught it. If one was entered by hand and the other imported, merge them from the queue — the merged row keeps the raw imported text.

Prices are stale

Check Health for the feed's status and remaining quota. Free providers have daily limits, and the app deliberately stops asking rather than burning through them.

I am locked out

Sign-in depends on BASE_URL exactly matching your public origin, because the OAuth redirect and the cookie scope are both derived from it. A mismatch after moving domains is the usual cause. Being asked to sign in again after SESSION_DAYS is expected — a session's lifetime runs from sign-in, not from the last click — and eight wrong passwords lock that sign-in for fifteen minutes. If the app will not start at all, check that SESSION_DAYS is a whole number from 1 to 3650.

Pages load but nothing saves

Every save answering That request was addressed to a different host than BASE_URL (a 403) means the app is being reached by a name or port that is not BASE_URL's. Use the address in BASE_URL, or its IP address. Behind a reverse proxy, pass the original Host header through, or send X-Forwarded-Host and set TRUST_PROXY.

Easier to try than to read about

The demo runs the real engine in your browser. Nothing to install, nothing to sign up for.

Open the demo