| Field | Details |
|---|---|
| Intern | Pronay Sarker |
| Project | Migration of Android Client to Kotlin Multiplatform (KMP) |
| Project Proposal | GSoC Proposal 2025 |
| Organization | Mifos Initiative |
| Official MSoC Duration | June 2025 - September 2025 |
The primary goal of my project was to migrate the Mifos Android Client application from a traditional Android-only codebase to a Kotlin Multiplatform (KMP) architecture. This ambitious migration project aimed to enable code sharing across multiple platforms - Android, iOS, web and Desktop - by moving business logic, data layers, and UI components to a common codebase.
Key Objectives:
- Migrate Core Modules: Transform core modules (database, network, common utilities) to KMP-compatible implementations
- Feature Migration: Systematically migrate feature modules to Compose Multiplatform (CMP) to enable cross-platform UI
- Dependency Injection Modernization: Replace Hilt with Koin for better multiplatform support
- Maintain Stability: Ensure the migration doesn't break existing functionality and user workflows
- Code Quality: Improve overall code architecture and maintainability during the migration process
My role in this project involved migrating the modules, fixing bugs that emerged during the transition, implementing new UI features using Compose Multiplatform, and actively reviewing peer contributions to maintain code quality throughout the migration process.
- feat: Core/common to KMP #2351
- feat: Migrate [core/database] to KMP #2354
- feat - Migrate hilt to koin #2337
- Feat - CMP migration of feature/groups #2369
- Migrate [feature/splash] to cmp #2370
- feat : Migrate Datatable to cmp #2382
- Integrate Fastlane and update CI workflows #2484
- fixed App build issue + network calls #2383
- fix: Fixed build failure #2329
- fixed CMP plugin naming convention #2332
- Removed testing module #2371
- fix: Login was successful even it is not authenticated #2322
- fix - Failed to fetch staffs in createNewClient screen #2357
- fix: Can't create new client #2358
- Fix: App crash on disburse loan Click #2336
- [kmp branch] Fixed app crash on loan disbursement screen #2336
- fix: Replaced hardcoded package name with context.packageName for FileProvider #2335
- Updated zoom link #2326
- refactor: migrate feature/update-password to CMP #2802
- refactor: [feature/guarantor] migrate to CMP #2808
- feat: [feature/recent_transactions] to CMP #2810
- Key Focus: Core KMP migration work (database, common modules, features)
- Foundation Work: Hilt to Koin migration, build system fixes, CI/CD improvements
- Impact: Established groundwork for the full KMP migration during MSoC period
Focus: Initial repository familiarization and CMP migration of feature modules
- Jun 5 - feat : Collection sheet migrated to cmp
- Jun 8 - refactor(feature:path-tracking): migrate to CMP
- Jun 9 - savings migration to CMP #2398
- Jun 14 - errorFix: Parameter not null defined as null in savingsDepositScreen #2405
- Jun 24 - fix: failed to create savings account #2412
- Jun 27 - Fix: Failed to activate centers/groups/clients #2419
- Jun 27 - Fix auto-login delay and snackbar message not showing while there is ... #2418
- Jun 10 - Feat - CMP migration of feature/groups
- Jun 11 - fix: Settings Module Enhancements (Theme Change and Clean Up)
- Jun 12 - feat : Offline Migrate to CMP
- Jun 13 - feat : Migrate Datatable to cmp
- Jun 13 - feat : Document Migrated to CMP
- Jun 22 - refactor(feature:client): migrate to CMP
- Jun 22 - Report migrate to cmp
- Jun 25 - fix: failed to create savings account
- Jun 26 - fix : Group Module (api), added Navigations in Feature Nav Host
- Jun 27 - fix(feature:client): resolve early empty state and dialog layout in identifiers
- Jun 27 - fix(feature:client): fix signature reset issue and enforce white canvas background
- Jun 27 - fix : UpdateServerConfig (navigation,ui)
- Jun 28 - fix : Create Client
- Jun 29 - fix : SavingsAccount With Drawl and Saving Account Deposit screens not loading Serializable error
- Jun 25 - refactor: radio button component
- Jun 29 - feat: onboarding language screen ui and viewModel
- Jun 17 - [MW-225] feat(auth): Implement full Sign In & Sign Up flow with validation
- Jun 28 - Refactor MakeTransferScreen to improve account selection using BottomSheetScaffold
Focus: Desktop build fixes, KMP implementation cleanup, and UI migration
- Jul 2 - fix: cmp-desktop does not build #2427
- Jul 7 - Final cleanup of kmp-impl branch #2431
- Jul 7 - removed todo in clients/centers to prevent app crash #2432
- Jul 8 - Fix : Can't Load savings Account summary because of typeError #2434
- Jul 28 - Fix: FOREIGN KEY constraint failure when saving ChargesEntity to DB #2442
- Jul 3 - feat: Refactor SignatureScreen to CommonMain using Compose-Signature Library
- Jul 9 - fix(feature:client): fix stuck loading & empty state for charges UI
- Jul 12 - refactor(feature:client): merge ViewModels, add charge validation, fix empty chargeOptions crash
- Jul 16 - fix: Update server config not working
- Jul 2 - Sign in ui and view model
- Jul 7 - feat: otp authentication ui and viewModel
- Jul 8 - feat: recover password ui and viewModel
- Jul 9 - feat: set new password ui and viewModel
- Jul 21 - feat: savings account ui & viewModel
- Jul 25 - Indefinite snackBar fix #2867
- Jul 30 - refactor: bound dashboard services with respective screens
Focus: KMP merge to development, UI enhancements, and feature implementations
- Aug 4 - Fixed Client DataTable More Info view #2444
- Aug 5 - Ktorfit Cleanup: Remove Duplicates and Align DI Configuration #2446
- Aug 6 - Merge kmp-impl into development #2447
- Aug 13 - fix scrolling in landscape mode #2451
- Aug 26 - feat: Client savings accounts UI #2472
- Aug 28 - Client Loan accounts UI #2477
- Aug 31 - feat: Client identities list screen with new UI #2483
- Aug 3 - fix(feature:path-tracking, core:network): fix bugs in path tracker fe...
- Aug 4 - 498. Remove the visible DialogBox after Identifier creation submission #2445
- Aug 8 - fix(feat:client-identifiers): fix dialogue visibility issues for creating client identifiers #2449
- Aug 27 - Client Profile Notes #2471
Focus: New UI implementations, feature enhancements, and code reviews
- Sep 2 - feat: Client upcoming charges UI #2488
- Sep 4 - feat: Share accounts UI #2495
- Sep 6 - Feat: Update Accounts order by Active state – Show active accounts at top in ascending order #1922
- Sep 8 - Disable Continue button until Amount & Description is not empty #1925
- Sep 1 - feat: Client identities list screen with new UI #2483
- Sep 1 - MIFOSAC-573 Client Recurring Deposit Accounts #2486
- Sep 1 - Client Loan accounts UI #2477
- Sep 2 - MIFOSAC-572 Fixed deposit account #2489
- Sep 3 - fix notes screen issue #2485
- Sep 3 - MIFOSAC-589 Fix: Client Identity status is showing not found always. #2492
- Sep 5 - feat: Share accounts UI #2495
- Sep 5 - feat: Client upcoming charges UI #2488
- Sep 10 - Client – Upload & Manage Signature #2498
- Sep 10 - feat : New Loan Account – Charges Step Implementation #2497
- Sep 10 - feature(savings): new savings account, details step impl #2500
- Kotlin Multiplatform (KMP/CMP) architecture
- Jetpack Compose for UI development
- Dependency Injection (Koin migration from Hilt)
- Network layer (Ktorfit)
- Database management (Room)
- Cross-platform mobile development
- Git workflow and collaborative code review practices
- Bug diagnosis and resolution
After my migration of the Android client project, this project enables
- Code Sharing: Shared business logic across Android, iOS, web and Desktop platforms
- Maintainability: Single codebase for core features reduces maintenance overhead
- Scalability: Easier to add new platforms in the future
- Performance: Improved app stability through bug fixes and refactoring
My journey with the Mifos Initiative began in March 2024, even before the official MSoC period. Since then, I have been a regular contributor to the Mifos Field Officer application, with over 80 commits, making me one of the top three contributors to the project. Through this early and consistent involvement, I gained deep insights into cross-platform mobile development, modern Android architecture, and large-scale codebase migration, along with a strong understanding of collaborative development in open-source environments.
I had a great experience throughout this four-month-long program. I received tremendous support from the community as well as my mentor, Rajan Maurya, during this three-month journey. I would also like to thank Ed Cable for his outstanding support. The weekly check-ins were excellent. I had a great opportunity to bond with the community, as well as solve some problems that I encountered in the interim. I learned and grew a great deal as a result of this experience. It would be my pleasure to contribute to this organization in the future, as well as to assist new contributors to get started in this community.
Warning
Live document, Links will be updated