GS.Let's talk
New

Yalla Budget

A shared family money tracker for Egypt, where logging any expense takes under 10 seconds.

Yalla BudgetInteractive demo · sample data

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.

< 10 starget to log any expense
4Egyptian bank templates (8 message patterns)
0.65on-device confidence before the AI fallback
900+backend tests

How it works

Capture beats everything

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.

Bank message templates on the server

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.

A Shortcut built for each bank

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.

Read on the phone first, cloud AI as a backup

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.

Privacy enforced by the server

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.

Multi-currency, self-hosted, paid two ways

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.

Built with

Expo / React Native (TypeScript)Expo RouterPython FastAPIPostgreSQL + SQLAlchemy + AlembicML Kit on-device OCROpenRouter / Claude (AI fallback)iOS Shortcuts generationStripe + StoreKit 2Docker + Caddy on a VPS