Qisma (قِسمة)
Qisma starts from a simple promise: every person should know exactly how much they paid, how much they owe, and who they need to pay — without spreadsheets and without an account wall. A user can create a group, add members and expenses, and see balances and settlement suggestions as a guest, before ever signing in.
Money is modeled as integer minor units end to end — never floating-point — so a settlement is exactly reproducible, not "close enough." The settlement engine matches debtors against creditors to minimize the number of transfers needed to zero out a group, while an append-only expense-revision model keeps full history even as expenses are edited or deleted.
What the app does
Create groups for a trip, a flat, or a team, and add members by name — no accounts required to get started.
Split an expense evenly across selected members, or assign exact custom amounts — both validated to match the expense total exactly.
Paid, owed, and net are computed per member from an append-only expense-revision ledger, so edits and deletions never lose history.
A debtor/creditor-matching algorithm works out who should pay whom, minimizing the number of transfers needed to settle the group.
The full guest flow — groups, expenses, balances, settlement — works with zero sign-up; an account is only needed for cloud backup and cross-device sync.
Fully bilingual with intentional RTL layout, built on Flutter's gen-l10n rather than any hard-coded UI strings.
How it's built
Qisma follows a feature-first Flutter architecture with strict layer boundaries: domain services own the financial rules (splitting, balance calculation, settlement matching) and stay independent of Flutter, Firebase, and the storage layer entirely, so the same rules are testable in isolation from the UI. Drift/SQLite is the offline-first local store, with stable IDs and versioned, tested migrations. A later V1 layer adds Firebase Authentication, idempotent guest-to-account migration, and cloud synchronization behind a trusted backend — accepted mutations get a server-assigned financial sequence and idempotency key, so a retried sync can never double-apply a settlement.
See it in action











Real engineering challenges
Floating-point arithmetic introduces IEEE-754 rounding artifacts that accumulate over split ledgers. All monetary transactions and line items are modeled strictly as integer minor units (e.g. cents/piastres) from the database schema up to calculation, eliminating penny-drop discrepancies.
Built a greedy bipartite matching settlement algorithm that balances creditors and debtors to calculate the absolute minimum number of peer-to-peer payments required to reconcile an entire group ledger.
Designed an append-only expense revision ledger stored locally in Drift/SQLite. Users can manage complex group ledgers completely offline without account friction, with seamless idempotent migration when connecting an optional cloud account.