1. Map the layers
In the Clarity Sprint we read the codebase, mark what is domain, data and interface, and find the code that has to be untangled first.
Kotlin Multiplatform migration
If your Android app is written in Kotlin, most of what makes it valuable can be shared with iOS: the business rules, the data layer, the networking and the offline storage. We move those into a shared Kotlin module step by step, keep your Android app shipping the whole time, and build the iOS app on the same core.
How the move runs
In the Clarity Sprint we read the codebase, mark what is domain, data and interface, and find the code that has to be untangled first.
Domain models, rules, validation, networking and local storage move into a shared Kotlin module, one feature at a time.
The Android interface stays as it is and keeps releasing on top of the shared module throughout.
The iOS app gets its interface, native SwiftUI or shared Compose Multiplatform, and calls the same rules as Android.
From here a rule is written and fixed once, and both apps get it in the same release.
What moves and what stays
Business logic is where correctness lives and where duplication is dangerous. Interface and platform integration are where users notice compromise. We share the first and keep the second platform-specific.
Domain models and business rules; use cases and validation; networking and API contracts; local database and caching; repositories and dependency injection.
Interface code (unless you choose Compose Multiplatform); navigation and lifecycle; permissions and system dialogs; camera, location and sensors; push notifications; secure credential storage.
Kotlin code, business rules kept out of Activities and Fragments, and a repository or data layer. Missing pieces are fixed first, inside the plan.
Proof
Three apps from one shared Kotlin codebase: customer, rider and admin control tower. The customer app is live on Google Play.
Property maintenance across managers, contractors and tenants, with business rules written once for Android and iOS.
Why moving a Kotlin app to KMP extends it, while Flutter would replace it.
Engagements
The same published prices as every AppVion engagement. The full breakdown is on the pricing page.
One to two weeks. The workflow map, feature priorities, technical direction and a fixed quote for the build. You own the output whether or not we build it.
8 to 12 weeks for a focused feature set, paid against milestones.
12 to 16 weeks for multi-role systems with dispatch, approvals, live tracking or payments, shipped in focused releases.
On final payment you own the source code, repositories, store listings and backend accounts. No lock-in.
FAQ
Usually not. A well-structured Android app already separates its domain and data layers. Those move into a shared Kotlin module while the Android interface keeps working untouched.
They should not. The Android app keeps its own interface and keeps shipping while the shared module is introduced underneath it.
The iOS app needs an interface: native SwiftUI on top of the shared module, or Compose Multiplatform screens shared with Android. We build either and tell you which suits your product.
It depends on how cleanly the app is layered today, which is exactly what the Clarity Sprint (from $1,500, one to two weeks) establishes. You get a fixed quote and timeline before any build starts; full builds run $12,000 to $35,000.
Start the conversation
Send us the repository or describe the app. In twenty minutes we can tell you how much of it can be shared.