- Designed and built alone: mobile app, web dashboard and sync API
- First version in React Native (Expo, Redux Toolkit, SQLite), used as a living spec for the native rewrite
- Native Android rewrite in Kotlin Multiplatform: shared data and logic module, Jetpack Compose + Material 3 UI, MVVM with Koin
- Offline-first local database (Room KMP) with client-generated UUIDs and soft deletes, ready for incremental sync
- On-device OCR with ML Kit: scan or share Wave and Orange Money screenshots to turn them into transactions
- Layout-aware receipt parser (Wave history, Wave detailed receipt), checked against anonymized real ML Kit output
- Automatic categorization: per-merchant memory learned from user corrections, then FR/EN keywords
- Insights screen with hand-drawn Compose Canvas charts: income vs spending curve, category donut, top merchants, spending calendar
- Biometric app lock, hidden recent-apps preview, protected "erase all data" flow
- English and French, light and dark themes
- Laravel 12 + Inertia + Vue web dashboard and sync API (Sanctum)

Asna—
Asna – Offline-first Personal Finance App
Founder & Mobile Developer
Visit SitePersonal finance tracker for mobile money users in Senegal. Expenses and income in FCFA, Wave and Orange Money receipts read by on-device OCR, insights with charts, app lock. Prototyped in React Native, now being rewritten natively in Kotlin Multiplatform with Jetpack Compose, with a Laravel sync API.
Kotlin MultiplatformJetpack ComposeRoomML KitReact NativeExpoLaravelVue.js