Teman Bumil
A pregnancy app for mothers-to-be in Indonesia, with 1M+ downloads, live streaming, a loyalty rewards marketplace and in-app e-commerce. I maintained the native codebase first, then led the migration to Flutter.

Overview
Teman Bumil is a pregnancy app for mothers-to-be in Indonesia. I spent my first year maintaining the core native features in Objective-C and Kotlin. When management decided to cut the cost of maintaining two codebases, I led the migration to one Flutter codebase. The app now has 1M+ downloads and ~150K MAU with a 99.5% crash-free session rate, and it has grown from a pregnancy tracker into a health and community platform.
The problem
The app ran on two separate native codebases, Objective-C on iOS and Kotlin on Android. Maintaining both cost more than one codebase would, so management decided to move to Flutter to save development and maintenance cost. I was the mobile engineer on the migration.
Contribution Highlights
I led the migration and built the modular architecture.
1. Flutter migration
Led the migration from native iOS and Android to one Flutter codebase. It sped up feature delivery and ended the work of maintaining two separate apps.
2. Real-time Expert Consultation
Built a modular architecture and integrated RocketChat via WebSockets, so users can consult health experts in real time.
3. Loyalty Rewards & E-commerce
Built a loyalty mission system where users earn points for completing pregnancy-related tasks, redeemable in an in-app rewards store. Built TB Shop, the in-app e-commerce feature, with GraphQL as the API layer and Xendit as the payment gateway.
4. Community & Live Streaming
Built out the threads & community forum, curated article and tips lists, and shipped media live streaming so users could join live sessions with health experts and other moms.
5. Multi-Provider Login, Push Notifications & CI/CD
Added Google, Apple and Facebook sign-in, wired up push notifications, and set up an automated CI/CD pipeline with unit tests, which improved deployment efficiency by 20%.
6. Offline Support & Testing
Implemented SQLite persistence, offline caching, file handling and network retry workflows. Introduced unit testing and reached 40% code coverage.
Architecture and trade-offs
One Flutter codebase
The decision came from management, and the reason was cost: one codebase is cheaper to build and maintain than two. Besides the migration, I also revamped some of the old features along the way.
Starting with no architecture
The app had no tech architecture to build on, and I was the only person in charge of the project at first. I explored several architectures, implemented them, and refactored whenever one did not work as planned. This was the hardest part of the migration.
From MVVM with RxDart to BLoC with Clean Architecture
I started with MVVM and RxDart. Later I refactored to BLoC with Clean Architecture and modularization, which made the code simpler, cleaner and testable. The cost was the time spent building and then reworking the first version.
Outcomes
- 1M+
- Downloads
- App-level result, reached after the move to one Flutter codebase.
- ~150K
- Monthly active users
- App-level result, with the squad of five I led.
- 99.5%
- Crash-free sessions
- App-level result, with the squad of five I led.
- 40%
- Unit test coverage
- Personal result. I introduced unit testing during the migration.
Key Features
- Pregnancy Milestone Tracking
- Hydration & Pregnancy Checklist
- Live Chat & Expert Consultation
- Live Streaming
- Threads & Community
- Article & Tips List
- Loyalty Missions & Rewards
- In-app E-commerce (TB Shop, Xendit)
- Offline Caching & Network Retry
- Multi-Provider Login (Google/Apple/Facebook)
- Push Notifications
Gallery & Mockups
Let's talk
Open to remote full-time and freelance work. I'm based in Tangerang, Indonesia (WIB, UTC+7) and reply within 24 hours.
I also take freelance projects. See freelance work