Case study Nº 05
Android app
Dukaan Book
A ledger for small shops that keeps working when the internet does not.
- Type
- Android app
- Stack
- Flutter · Dart · Riverpod · Drift · Supabase



A Flutter app for shops that run on cash, EasyPaisa and JazzCash. It records every cash in, cash out, transfer and expense, closes the day with a report, and syncs to the cloud whenever a connection is available.
Who it is for
Small mobile-wallet shops in Pakistan move money between cash, EasyPaisa, JazzCash, NayaPay and bank accounts all day. The typical user has one Android phone and patchy internet, so the app has to stay fast and correct offline.
The shopkeeper sees live balances and the day so far on the dashboard, records entries in a few taps, and closes the day with a report that can be exported as a PDF and shared. A reminder fires at closing time.
Offline first, for real
Every write goes to a local Drift (SQLite) database and an outbox table. A sync service pushes the outbox and pulls remote changes when the connection comes back. Supabase has no built-in offline sync, so this part is custom.
Getting money right
Amounts are stored as whole paisa, never as floating point numbers. Reports use the Asia/Karachi business day whatever the phone time zone is set to. On the server, row-level security limits every table to members of the shop.
Plates



