Demo — running on the test server (cityserver). Everything here is sample data.
Settings
Connections, security and import activity
How transactions get in
SMS forwarding for the day-to-day; statement uploads for the rest
The two feeds
- Bank SMS, forwarded from your phones — every purchase alert lands here within seconds, from both phones, deduplicated. This is the live feed.
- Statement uploads — SMS only covers what the bank sends alerts for. Fees, interest, debit orders and internal transfers usually arrive silently, so upload each account's statement or transaction-history export now and then (monthly is plenty) to keep balances exact. Re-uploading overlap is harmless — duplicates are recognised and skipped.
Forwarding Woolworths SMS from your phone
Woolworths only sends transaction alerts by SMS. Forwarding them here turns the card from month-behind into seconds-behind.
The Budget phone app
The phone app shows this website full-screen with the SMS forwarder built in natively. Install it once by opening http://localhost:3000/dr-budget.apk in the phone's browser; after that it updates itself (menu ⋮ → SMS settings holds the endpoint, token and keywords). Any SMS containing a keyword is posted straight here, with offline retry.
Or an automation app (MacroDroid, Tasker)
Trigger SMS Received → action HTTP Request: POST to the same endpoint, header Authorization: Bearer <token>, content type text/plain, body {sms_message}.
Either way: declined transactions are recognised and skipped, and anything already imported from the monthly statement is deduplicated, so nothing is counted twice.
Your personal token
Endpoint http://localhost:3000/api/sms/inbound
Token none yet — regenerate below
The token routes SMSes to your budget and nobody else's — never share it. if it ever leaks (then update it in each phone's SMS settings).
Email ingestion is switched off — no Google credentials are configured, and none are needed. Everything arrives by SMS and the statement uploads below. The README explains how to enable Gmail sync later if you ever want statements pulled in automatically.
Encrypted statements
The Woolworths e-statement is locked with your ID number
Import a statement
Backfill the history that email alerts cannot reach
Email alerts only produce data from the day you switch them on. Download a CSV or OFX statement from FNB online banking to load everything before that — trends, budget suggestions and year-on-year comparisons all need history to work with. Anything already recorded is recognised and skipped, so importing the same file twice is harmless.
Import activity
Every email looked at, including the ones skipped
Nothing yet. Connect Gmail and run a sync.
Your details
Password
Used to sign in to this app
Your Gmail token and ID number are encrypted with AES-256-GCM before being stored. Transactions, balances and budgets live only in your own Postgres database — nothing is sent anywhere else.
