My two personal Flutter apps make the same bet: your data stays on your phone. There are no accounts, no servers and no analytics. Here's how that shaped each one.
SpendSplit: one balance, two pockets
SpendSplit is a minimalist expense tracker for iOS and Android. It splits one bank balance into Available and Savings, with a biometric lock and a separate USD tracker. All data lives in SQLite on the device, and sensitive settings stay in the platform keystore.
The rule I'm most attached to is that every figure is derived from the entries and never stored. The ledger is always the source of truth, so there's nothing to drift out of sync. Bank SMS alerts become entries flagged for review: Android reads them directly, and iOS takes them through a Shortcuts automation.
- Monthly budget with a pace marker, plus per-category budgets
- Graphs: running spend, a 12-month income overlay, a daily heatmap and a balance trend
- Savings goals with a completion forecast based on your saving pace
- A separate USD ledger with an annual allowance and a year-end projection
- CSV and PDF export, CSV import and a full JSON backup
- Biometric lock, with balances hidden in the app switcher









Built with Flutter, Riverpod, Drift (SQLite), GoRouter and fl_chart. It's at v1.3.0, and the code is on GitHub.
Nudge: tasks that don't let you off the hook
Nudge is a local-first task manager where important tasks stay visible and keep reminding you until they're handled. The Focus tab shows a streak, one spotlight task, then your overdue, today and up-next lists.
The part I like is the escalation engine. A task you keep putting off climbs back into the spotlight with a "Put off N times" marker, and gets a daily nudge once its reminders have fired. Quiet hours shift reminders instead of dropping them.
- Natural-language quick add with tags, such as "call mom tomorrow 5pm"
- Fixed or repeat-after-completion recurrence, with custom rules
- Multiple reminders, opt-in persistent alarms, quiet hours and snooze
- Daily and monthly habits with check-ins, timers, checkpoints and streaks
- Goals with checkpoints and a progress chart
- A Pomodoro timer that credits time to the task
- Home-screen widgets with deep links, and eight colour palettes





It's built with Flutter, Dart, SQLite and local notifications, and it's at v2.0.0. Source on GitHub.
What local-first costs and buys
It buys you simplicity: no sign-in, no sync conflicts, nothing to host, and nothing of yours on someone else's server. It costs you the safety net, since the phone is the only copy. That's why both apps have export and import, with a full JSON backup in each.