Dr Budget13 to review

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

Woolworths sends the monthly statement as a password-protected PDF, and the password is the cardholder's ID number. Stored encrypted, used only to open those attachments, and never shown again once saved.

Locked statements will be skipped

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.

Drop a statement here, or click to choose

CSV, OFX or QFX from online banking. PDF statements work too.

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.