Home About Skills Experience Projects Certifications GitHub ↗ Hire me
← Back to Portfolio
Qisma (قِسمة) icon
Personal Project · Shared Expenses · Offline-First · Bilingual Arabic/English · Aug 2026

Qisma (قِسمة)

Overview

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.

0Floating-point money values — everything is integer minor units
Guest-firstFull group + settlement flow works before any sign-in
AR / ENBilingual with intentional LTR/RTL layout throughout
Core Capabilities

What the app does

👥
Groups & members

Create groups for a trip, a flat, or a team, and add members by name — no accounts required to get started.

🧾
Equal & custom splits

Split an expense evenly across selected members, or assign exact custom amounts — both validated to match the expense total exactly.

⚖️
Deterministic balance engine

Paid, owed, and net are computed per member from an append-only expense-revision ledger, so edits and deletions never lose history.

🤝
Settlement suggestions

A debtor/creditor-matching algorithm works out who should pay whom, minimizing the number of transfers needed to settle the group.

🔑
Guest-first, account-optional

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.

🌍
Arabic / English

Fully bilingual with intentional RTL layout, built on Flutter's gen-l10n rather than any hard-coded UI strings.

Architecture

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.

Guest UI (Drift / SQLite local store)→Financial Domain Rules (Minor Units Math)→Deterministic Settlement Engine→Optional Cloud Sync (Firebase Auth + Firestore)
Walkthrough

See it in action

Qisma (قِسمة) Screenshots Banner
Splash Screen
Splash Screen
Create Group
Create Group
Groups
Groups
Members
Members
Itemized Expense
Itemized Expense
Each Person Share
Each Person Share
Balances
Balances
Settlements
Settlements
Bill Split
Bill Split
Account Choice
Account Choice
Archived
Archived
Problems Solved

Real engineering challenges

Financial Precision
Zero Floating-Point Money Math

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.

Settlement Algorithm
Deterministic Debt Minimization

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.

Offline-First Ledger
Append-Only Revisions & Guest State

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.

Technologies Employed

Built with

FlutterRiverpodGoRouterDrift / SQLiteFirebase AuthCloud FirestoreCloud Functionsgen-l10n
Screenshot preview