← all projects

argent-android

Multi-module Android banking app — offline-first sync, mobile security, built to demonstrate production mobile architecture.

View on GitHub ↗Kotlinupdated 5d ago

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