Skip to content
Zrigou
All work

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.

Masroufi planning screen showing the amount available to spend
Masroufi home screen showing total money, account balances and quick add buttons
Masroufi home screen in Arabic
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

  1. 01

    Spend in one tap

    Quick buttons appear on their own from what you repeat, and every entry can be undone on the spot.

  2. 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.

  3. 03

    Debts, both directions

    Track what you owe and what you are owed, with instalment schedules and side-by-side repayment plans.

  4. 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.

  5. 05

    Budgets and goals

    Budgets show your pace through the period, and savings goals suggest what to put aside each month.

  6. 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