Outstanding Manager (FinTech Utility)
A specialized financial management tool for local businesses to track credits, debits, and outstanding balances. It features a rapid AI-driven entry system and a precise FIFO (First-In-First-Out) payment allocation engine.
Technical Specifications
Dart
Repository Pattern / Clean UI
Riverpod State Management
Android / iOS
Key Engineering Achievements
- AI-powered rapid entry agent
- Precise FIFO payment allocation
- Real-time ledger with automated balances
- Multi-party transaction history
Technical Deep Dives
A granular analysis of the engineering hurdles encountered during development and the architectural decisions made to resolve them at scale.
ACID-Compliant Ledger
Guaranteed atomicity in financial entries to prevent balance mismatches during local-to-cloud synchronization especially in flaky network conditions.
Utilized Firestore WriteBatch to ensure every ledger entry and its corresponding aggregate balance update succeed or fail together.
The repository layer wraps the transaction creation and running balance update in a single atomic WriteBatch.
final batch = firestore.batch();
batch.set(entryRef, entry.toMap());
batch.update(accountRef, {
'outstandingBalance': FieldValue.increment(entry.amount),
});
await batch.commit();FIFO Payment Allocation
Developed a First-In, First-Out algorithm to automatically distribute partial payments across multiple unpaid invoices based on age.
Designed an in-memory greedy allocation algorithm that pre-calculates the debt distribution before document creation.
The allocation engine iterates through a chronologically sorted invoice list to distribute the incoming payment amount precisely.
for (var invoice in invoices) {
if (remainingAmount <= 0) break;
double allocateToThis = min(remainingAmount, invoice.outstandingAmount);
allocations.add(PaymentAllocation(
invoiceId: invoice.id,
allocatedAmount: allocateToThis,
));
remainingAmount -= allocateToThis;
}Dataset Virtualization
Optimized the rendering of transaction histories with 1000+ entries using list virtualization for 60fps performance on budget devices.
Implemented Sliver-based lazy loading in Flutter to ensure only visible items are kept in memory.
The ledger screen performs a linear aggregation and uses CustomScrollView with slivers to avoid O(N²) calculation overhead during scroll events.
CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => LedgerRow(entries[index]),
childCount: entries.length,
),
),
],
)