argent-android
Multi-module Android banking app — offline-first sync, mobile security, built to demonstrate production mobile architecture.
KotlinComposeHiltMVIWorkManager
High-level design
A retail banking client split into independent Gradle modules behind one app shell, so payments, accounts, and auth can be built, tested, and released independently.
app shell
Hilt-wired composition root, nav graph, Play Console release config
↓
feature modules
accounts, transfers, auth — each owns its Compose UI and ViewModels
↓
domain module
currency-safe money math and use cases, no Android dependency
↓
data module
repositories, Room + SQLDelight, Ktor networking
↓
offline-sync-engine (external)
the durable queue + backoff/jitter engine, wired in behind WorkManager
Low-level design
The offline transfer path is the load-bearing piece — see the dedicated state-machine section above for the full spec.
- –Idempotency key (opId) generated client-side before any network attempt
- –MVI unidirectional data flow — one Intent -> one State reducer per feature
- –Biometric Keystore + cert pinning isolated behind a security module so it's swappable in tests
- –Baseline Profiles generated from real androidTest journeys, not guessed