The situation
Personal finance apps assume open banking, a cloud account and a user comfortable handing over their transaction history. In much of the world none of those hold. The brief was an app that is useful with no connectivity, no bank integration and no server holding anyone’s spending record.
What we built
- Transactions and categories, grouped by need, want and saving.
- Installment plans for vehicles, plots and rotating savings committees, modelled as first-class plans with schedules, progress and due dates.
- Budgets and limits with pace warnings before the month ends rather than after.
- Insights: category breakdowns, month-on-month comparison and a year in review.
- Bills, debts and assets, with local reminders, lending and borrowing ledgers, and an asset register that produces net worth.
- A Zakat calculator, with zakatable assets flagged at entry and computed on demand.
- Data control: full export to CSV and JSON, restore from a backup, and a single action that erases everything on the device.
Why the architecture is the feature
Local-only storage removes the entire category of risk that makes finance apps hard to trust and expensive to run. There is no breach surface, no hosting bill that scales with users, and no consent conversation to have. It also forced discipline: every feature had to work with nothing but the device. The app is built with Flutter from one codebase, stores data in SQLite through Drift, and manages state with Riverpod.
Light and dark themes are driven by design tokens rather than duplicated screens, so a new feature ships in both appearances on both platforms at the same time.
