What it does
- Books in any currency: accounts, transfers, refunds, opening balances and nested categories, kept as double entry.
- Statement import: upload a bank PDF or forward it by email. Three banks are read directly; others come in through an AI assistant and are accepted only if the running balances add up.
- Budgets and recurring entries. A new budget can start from last month or last year’s spending.
- Gold and silver held in grams, valued at market rates, with gains before and after charges.
- Zakat due on the Hijri anniversary, with a gold or silver nisab.
- Lend and borrow, including split bills.
- Arabic and English, right to left included, in light and dark.
How it’s built
- Laravel 13 on PHP 8.5 with Hotwire Turbo: server-rendered pages that feel like an app.
- The Android app wraps the same pages with Hotwire Native and adds native tabs, push notifications and a fingerprint lock.
- Email import runs through a signed Mailgun webhook and a queued job; the user gets an email and a push when it’s done.
- Matching runs in steps: the same amount within three days, then transfers between your own accounts, then your rules. Anything left waits for review.
- An MCP server behind OAuth gives AI assistants 19 tools to read balances, record transactions and import statements. Editing and deleting are left out on purpose.
- Money is stored as whole numbers in the smallest unit.
Quality
- 150 test files with about 660 cases, including browser tests.
- PHPStan at the highest level, 100% type coverage, and Rector and Pint on every commit.
Result
Live at masroofi.yehya.dev and on Google Play.