Problem
People managing day-to-day money across cash, bank accounts, cards, and wallets can lose track of spending, upcoming instalments, and savings progress when records are spread across separate tools.
Solution & approach
Cento brings personal finance workflows into one Android app. A guided onboarding flow captures the user’s region, financial goal, and first account. Room persists accounts, transactions, budgets, EMIs, savings goals, and bill reminders locally, while reactive queries keep the Compose screens current.
Technology stack
Kotlin · Jetpack Compose · Material Design 3 · Android Room · Kotlin Coroutines · Kotlin Flow · DataStore Preferences · Firebase Authentication · Android BiometricPrompt · Gradle · KSP
Key features
- Regional onboarding and multi-currency display
- Cash, bank, card, and wallet accounts
- Income, expense, and transfer tracking
- Category budgets with spending progress
- EMI and loan instalment tracking
- Savings goals and contributions
- Bill reminders and scheduled notifications
- Analytics and category breakdowns
- CSV data export
- Firebase email authentication and password reset
- Optional biometric app lock
Screenshots and demonstration
Challenges and decisions
Finance screens need to stay consistent as account balances, transactions, and monthly budgets change. Cento uses Room queries and Flow to keep data-driven Compose views updated, and includes database migrations to evolve the local schema while preserving existing user records.
Results and limitations
Delivered an Android app with guided onboarding and connected finance workflows for accounts, transactions, budgets, instalments, savings goals, and bill reminders. The repository includes local Room persistence, preference storage, authentication flows, biometric locking, and notification scheduling.
Lessons learned
A local-first design keeps everyday finance records available on the device and makes clear data ownership part of the product architecture. Reactive database queries help keep balances and summaries aligned across the app.