Every software project begins with a burst of enthusiasm.
You have a vision in your head, a blank repository on your machine, and a strong urge to open your IDE and start coding UI screens.
When I started building FinLedger on August 19, 2026, I knew that building an offline-first financial ledger would require discipline. If you write UI screens before defining the underlying data contracts, you end up rewriting the entire application three weeks later when accounting edge cases surface.
Here is the chronological breakdown of how FinLedger evolved across Sprints 0 through 5—from a bare repository to a functional personal finance engine.
The Sprint Evolution Roadmap
timeline
title FinLedger Early Sprint Evolution (August 2026)
section Inception & Design System
Aug 19 (edaa66d) : SRS Architecture & Core Entities
Sprint 0 (73b85a9) : Material 3 Tokens & Navigation Shell
section Core Ledger & Entry
Sprint 1 (c592aad) : Date-Grouped Ledger & Account Switcher
Sprint 2 (1a440d8) : Fast Intent Modal & Account Selector
section Dashboard & Accounts
Sprint 3 (4a6168f) : Available Money Hero Card & Net Worth
Sprint 4 (6f375c9) : Credit Card Liability Hub & Portfolios
section Onboarding & Security
Sprint 5 (21850e6) : Guided Onboarding & Biometrics
Sprint 0: Design Tokens and Navigation Shell
The first sprint (commit 73b85a9) did not build financial features. It established the architectural scaffolding:
-
Material 3 Design System: Defined typography scales, corner radii (
FinShapeTokens), and theme-aware color palettes (FinColors). -
Reusable Core Widgets: Created baseline components like
FinCard,AmountDisplay, andFinButtonthat encapsulate accessibility standards across all future screens. - 2-Tab Container: Introduced a high-performance bottom navigation shell linking the Ledger feed and Dashboard overview with zero swipe lag.
The Lesson: Building reusable presentation tokens first ensures that every screen built in subsequent sprints inherits a unified aesthetic without UI drift.
Sprint 1: Ledger Home Screen and Date-Grouped Feeds
Sprint 1 (commit c592aad) focused on the core activity feed:
- Date-Grouped Transaction List: Transactions grouped by date with sticky day headers showing daily net cash flow.
- Account Switcher: A horizontal chip carousel allowing users to filter the ledger to a specific bank account, cash wallet, or view all accounts combined.
- Period Totals Header: Real-time aggregation of income, expense, and net balance for the currently selected period.
The Engineering Challenge: Displaying hundreds of date-grouped items in a Jetpack Compose LazyColumn caused micro-stutters during rapid scrolling. We introduced a debounced state pipeline in LedgerViewModel that computes date groups in a background coroutine before emitting UI state.
Sprint 2: The Fast Intent Transaction Modal
Sprint 2 (commit 1a440d8) tackled transaction entry speed:
- If recording an expense takes more than 10 seconds, users will stop doing it after three days.
- We designed an intent grid modal allowing users to tap a transaction type (Expense, Income, Transfer, Card Payment) with single-tap category selection.
- Created an intelligent numerical keypad with direct currency symbol formatting.
flowchart LR
subgraph FastEntry["Sprint 2 Transaction Input Flow"]
direction LR
Intent["Select Intent:
Expense / Income / Transfer"] --> Account["Auto-Select Primary Account"]
Account --> Keypad["Fast Numerical Keypad"]
Keypad --> Validate["Pure Domain Validation
(Amount > 0, Valid Accounts)"]
Validate --> Commit["Atomic Room Write
(withTransaction)"]
end
Sprint 3: The Available Money Hero Card and Explore Hub
Sprint 3 (commit 4a6168f) introduced FinLedger's signature concept:
- The Available Money Card: Instead of displaying only Net Worth, the top of the dashboard prominently calculates: $$\text{Available Money} = \text{Liquid Cash} - \text{Credit Card Outstanding}$$
- Explore Hub: A centralized portal organizing advanced subsystems: Budgets, Recurring Transactions, Lending, and Exporting.
The Decision: Placing Available Money at the very top of the dashboard transformed the app from a passive historical record into an active daily decision-making tool.
Sprint 4: Accounts Portfolio and Credit Card Management
Sprint 4 (commit 6f375c9) built the multi-account management hub:
- Explicit segregation of Cash, Checking, Savings, UPI, Credit Cards, and Investments.
- Credit Card Hero Cards: Surfacing billing closing dates, payment due dates, and visual credit limit utilization bars.
- Enforced domain-level liability rules preventing credit cards from acting as generic asset accounts.
Sprint 5: Guided Onboarding, Biometrics, and Test Verification
Sprint 5 (commit 21850e6) completed the initial consumer product loop:
- Guided Onboarding Wizard: A step-by-step first-run experience that introduces privacy principles, helps users create their primary bank and cash accounts, and sets up authentication.
-
Biometric Security: Integrating Android
BiometricPromptwith fallback to a 4-digit PIN. - Automated Test Suite: Established comprehensive unit tests verifying that all early domain calculations maintained 100% mathematical parity.
Retrospective
By the end of Sprint 5, FinLedger had a rock-solid foundation:
- Clean separation between UI presentation, ViewModel coroutine pipelines, and pure Kotlin domain rules.
- Fast, predictable local persistence in Room.
- A distinctive product philosophy centered on Available Spendable Money and privacy.
Having this disciplined architecture in place is what allowed us in later sprints to add complex features—like on-device SMS parsing, Secret Fund vaults, and Split Group expenses—without breaking the foundation.
FinLedger is a privacy-first, offline-first personal finance application for Android that models bank accounts, credit cards, and cash without double-counting.
Explore FinLedger on Google Play: https://play.google.com/store/apps/details?id=com.devanshufinance.app

Top comments (0)