Yalla Budget
A shared family money tracker for Egypt, where logging any expense takes under 10 seconds.
What it is
A money tracker a whole family shares, with Egyptian pounds as the home currency. You log spending three ways: scan a receipt, type it in, or let the app pick up your bank's card messages. Every total opens the payments behind it, and the family admin decides exactly whose spending each member can see.
Why I built it
My goal was that any expense gets logged in under 10 seconds, whatever the method, because a tracker you have to remember to fill in stops being used. A family also needs privacy, so who can see whom is enforced on the server and not just hidden in the app. And I didn't want the machine quietly making up numbers: a scanned or captured payment never counts until a person confirms it.
How it works
The [+] button sits in the middle of the tab bar. Tap it to type an expense, or long-press it to go straight to the receipt camera. On Android the app reads Egyptian bank notifications as they arrive. On iPhone it uses Shortcuts automations, Apple Pay and Wallet, and Siri, where you can log an expense in one sentence. Captured items land in a 'To confirm' queue and stay out of every total until someone taps Confirm.
Each bank (CIB, NBE, Banque Misr, HSBC Egypt) has regular-expression templates with named groups for the amount, currency, card's last 4 digits and merchant. They live on the server and are sent to the apps, so supporting a new message format doesn't need an app release. Dates are read day-first, Egyptian style. OTPs and balance alerts are refused, and duplicate messages are fingerprinted so the same payment is never offered twice.
Nobody builds the iPhone Shortcuts by hand. The backend writes them in code: one per bank template that forwards the SMS text with a personal capture token, plus a quick-add Shortcut and an Apple Pay Shortcut that sends the amount, merchant and card from the Wallet transaction.
Receipts are read on the phone with ML Kit. A parser scores the likely total, merchant and date, giving a confidence from 0 to 1. Below 0.65, the photo goes to a cloud AI model on the server instead, using OpenRouter's free models with Claude as the paid fallback. Either way the fields come back marked as suggestions for a person to check.
Each member has a visibility set: themselves plus the members an admin ticks. Admins see everyone. The API filters every list, report and total by that set, so the app never even receives data outside it, and the member switcher never hints that hidden people exist.
Exchange-rate maths uses exact decimals with daily rate snapshots, and converted amounts are marked as estimates when needed. The FastAPI + PostgreSQL backend runs in Docker on a VPS behind Caddy. Subscriptions use StoreKit purchases (verified on the server) in the iPhone app and Stripe Checkout on the web.