Skip to content

← ProjectsCase study — 2023

Munjz Platform

Production home-services apps serving real customers — Flutter and native Android side by side, with a staged migration to Jetpack Compose that never paused feature delivery.

Overview

Munjz is a home-services platform with production apps in real customers' hands — an ecosystem of three: the consumer services app (250+ maintenance and cleaning services), CONNECT for facility and asset management, and MARKET for suppliers and vendors. My work there was the kind that doesn't fit in a screenshot: keeping delivery moving across that ecosystem while modernizing the foundations underneath it.

Problem

The platform spanned Flutter and native Android codebases that had grown at product speed. The native UI layer was due for Jetpack Compose — but a rewrite-and-freeze was off the table. Customers were using these apps daily; the business could not pause features for a migration.

Solution

A staged migration to Jetpack Compose that shipped alongside normal feature work:

  • Migrate screen by screen, behind stable interfaces, so each release contained both new features and newly-migrated surfaces.
  • Establish Compose patterns and conventions first, so every migrated screen made the next one cheaper instead of adding a second legacy.
  • Keep the Flutter and native apps coherent — one product, two runtimes, no drift in behavior.

Architecture

The migration only worked because boundaries came first: UI layers thin enough to swap, business logic that didn't care whether a screen was View- or Compose-based, and interfaces that let old and new coexist in the same release. That discipline — architecture as the thing that makes change cheap — is the real deliverable.

Stack

FlutterKotlinNative AndroidJetpack Compose

Gallery

  • Munjz Platform — screenshot 1
  • Munjz Platform — screenshot 2
  • Munjz Platform — screenshot 3

Results

A two-person Android team planned, built, and maintained the ecosystem — including apps taken from empty repository to App Store release in two weeks. Feature delivery never paused; the migration landed in increments instead of a big-bang release, and the codebase came out the other side on modern foundations with its release cadence intact.