Safi
Personal finance on your phone, double-entry
The problem
Personal finance apps are written in English first, assume a single currency, and upload everything you record.
What I built
A personal finance app for the Saudi market: local-first with a double-entry ledger, multi-currency, shared accounts, and a full brand identity.
- Every transaction is a balanced double entry, so the ledger holds however many accounts and currencies you add.
- Data stays on the device; only shared accounts sync, over plain requests to Supabase with no third-party SDK.
- Started in React Native, then moved to Swift and SwiftUI; the first version stays as the reference the new one is checked against.
- The whole identity: name, logo, icon and website.
Screenshots

Stack
- Swift
- SwiftUI
- SQLite
- GRDB
- Supabase