Mobile App
Masroufi
A private personal finance app that keeps every dirham on your device.
Android only. When you open the file, Android asks you to allow installs from this source.



- Role
- Designer & Developer
- Platform
- Android, with iOS and web from one codebase
- Type
- Mobile App
Overview
Masroufi (مصروفي) answers the questions a household actually asks: how much do I have, what do I owe, and how much can I safely spend? Accounts, transactions, debts, budgets, recurring income and bills, savings goals and reports all live in one place.
It is Arabic first with full right-to-left support, alongside French and English, and uses the Moroccan dirham by default. Everything stays on the device: no account, no server and no analytics.
Built with
- React Native
- Expo
- TypeScript
- Expo Router
- SQLite
- Jest
- Playwright
What it does
01
Spend in one tap
Quick buttons appear on their own from what you repeat, and every entry can be undone on the spot.
02
Available to spend
Starts from your spendable accounts, then subtracts upcoming bills, debts and money set aside for goals. Expected income is never counted.
03
Debts, both directions
Track what you owe and what you are owed, with instalment schedules and side-by-side repayment plans.
04
Income and bills on autopilot
Add a salary or a bill once and it records itself on its date. You can edit, pause or delete any of them.
05
Budgets and goals
Budgets show your pace through the period, and savings goals suggest what to put aside each month.
06
Reports you can read
Cash flow, where money came from and went, comparisons with the last period, and PDF or CSV exports that keep Arabic intact.
Inside the product





How it is built
No balance is stored anywhere
A balance is the sum of an account's ledger entries, so it cannot drift from history.
Money is integer minor units
Amounts are parsed with string arithmetic. Input that cannot be read exactly is refused, never rounded.
Encryption you can verify
Backups use AES-256-GCM with a key derived by scrypt. A restore is checked in full first and is all-or-nothing.
A missing translation is a compile error
Arabic, French and English are typed, so a key cannot go missing in one language.
Tests run real SQL
Finance tests exercise real migrations, constraints and views instead of mocks, and end-to-end journeys drive the actual UI.
One definition of every total
Balances, cash flow and debt totals come from a single set of SQL views, shared by every screen.
Next project
Inspectra