Now
Leading KMP/CMP at GeoKrishi Farm Aalekh — Gradle plugin on the Gradle Plugin Portal Nepali Date Picker — KMP · Android · iOS · Desktop · Web KMP-Logger — lightweight structured logging Publishing on Maven Central · Gradle Plugin Portal · PyPI Writing on Medium & dev.to Coding by day, crafting verses by night

KMP / CMP Lead Developer · Kathmandu, Nepal

ShivaThapa

I am Kotlin Multiplatform developer — Android and iOS shipped from one codebase — and publish the reusable parts: libraries on Maven Central, a Gradle plugin, and long-form engineering writing.

The flagship case study: GeoKrishi Farm, a production app rebuilt as Compose Multiplatform and shipped to existing users on the App Store and Play Store.

93%
shared code — production app, both stores
4
registries — Maven Central · Gradle Plugin Portal · PyPI · Play Store
2+ years
production KMP — Android + iOS

Now — leading KMP/CMP at GeoKrishi

Work

One employer,
many products.

Pathway Technologies · Kathmandu · May 2024 – Present

Feb 2026 – Present

TripTurbo — Android/KMP Developer

  • Built the international flight-booking vertical end-to-end — search, dynamic fare repricing, PNR creation with multipart document upload, passenger forms with validation, promo codes, and payment integration — across the shared Kotlin data layer and Compose UI (~80 files).
  • Unified Android and iOS analytics onto a shared KMP tracking layer (GA4 + Meta App Events), writing both the Kotlin and Swift halves.
  • Oversees feature delivery and mentors developers while progressively rolling Compose Multiplatform out to the iOS codebase, replacing the remaining SwiftUI surface.
  • Migrated the networking layer to a typed sealed response hierarchy with per-status error mapping — an 87-file refactor that removed ~2,500 net lines.
  • Diagnosed R8 obfuscation breaking encrypted-storage keys and shipped a legacy-key migration so existing users' sessions survived the upgrade.
  • Cut three production releases; hardened payment flows, including deduping payment-gateway callbacks to prevent duplicate verification calls.

Apr 2025 – Present

GeoKrishi Global — KMP/CMP Lead Developer

  • Leads mobile — feature roadmap and architecture — as ~97% sole author from empty repo: 596 of 615 commits, ~90% of the code shared across Android and iOS.
  • Wrote the shared infrastructure solo: Ktor networking with typed errors and token refresh, a WebSocket real-time layer, Koin DI, type-safe navigation, encrypted key-value storage, and a single expect/actual boundary for all platform code.
  • Built real-time crop-health chat over WebSockets with cross-platform audio recording and playback and streamed file uploads — including fixing an upload OOM.
  • Localized for multi-country use: three-language UI with per-app language preferences, language propagated to HTTP and WebSocket headers, country-code login, currency-aware pricing.

May 2024 – Present

Geokrishi Farm — Android Developer & KMP Lead

  • Owns Play Store and App Store releases — including swapping the entire codebase for the Compose Multiplatform rebuild under the same listings, one version to the next.
  • Module graph has grown to 52+ since the rebuild (46 at ship), still with compile-time-checked module boundaries.
  • Built the shared Material 3 component kit, including a Compose adaptation of iOS's Liquid Glass so native surfaces still feel platform-correct.
  • Crashlytics ownership: crash monitoring, mapping and native-symbol uploads, release health.
  • Startup performance: baseline and startup profiles benchmarked with Macrobenchmark on the low-end hardware farmers actually carry — ~18% faster cold start.
  • Drove AdMob integration and monetization experiments to grow in-app ad revenue.
  • Team liaison.

The case study below is this role's centerpiece.

May 2024 – Present

Internal & field products

  • Built multiple internal apps greenfield — first commit to internal distribution.
  • Offline-first field data-collection apps for teams working beyond reliable connectivity — local persistence, deferred sync, conflict-tolerant uploads.
  • Internally distributed and maintained alongside the store-published products.

Case study · GeoKrishi Farm · May 2024 – Present

Same app, same listing,
new architecture.

The flagship case study. GeoKrishi Farm is a farming app for Nepali farmers, in production on the Play Store and the App Store. The old codebase was KMP in name only — one Gradle module, a token slice of Kotlin compiling for iOS, and the entire iOS UI duplicated in SwiftUI. I rebuilt it as Compose Multiplatform and shipped it to existing users as a normal store update — same listing, next versionCode.

Codebase before and after the rebuild
Metric Old New
Gradle modules 1 46
Kotlin compiled for iOS 848 lines (of ~215,000) 119,742 of 128,801 in commonMain — 93%, UI included
Swift 64,690 lines (fully duplicated UI) 993 lines
Codebases Two (Kotlin + SwiftUI) One — live on App Store + Play Store, same listings

Shipping in place

  • Zero-friction credential migration for existing users across an R8-obfuscation boundary — no forced re-login on update.
  • iOS Keychain hygiene for fresh installs — Keychain items outlive the app, so reinstalls must not inherit stale secrets.
  • Backward compatibility for years of accumulated deep-link and push-payload formats.

Measured, not estimated

Cold start on a Redmi Note 11 (Android 13), 10 iterations each: 1,359 ms median without a baseline profile, 1,118 ms with one — ~18% faster. Baseline and startup profiles are generated on real low-end hardware, because that is what the users have.

Under the hood

Biometric vaults, matched semantics

AndroidKeyStore AES/GCM cipher bound to the prompt ↔ iOS Keychain kSecAccessControlBiometryCurrentSet; both invalidate on biometry change.

Firebase via CInterop

A 16-line hand-written Objective-C header; the Kotlin klib carries no Firebase dependency.

Swift implements Kotlin

A Kotlin interface implemented in Swift bridges Google Maps/Places.

Payment SDKs, one Kotlin interface

Same pattern as Maps — each platform's native payment SDK sits behind a shared Kotlin interface, so checkout call sites don't branch on platform.

One push/deep-link resolver

FCM push and deep links unified through a single shared Kotlin resolver on both OSes.

37 expect/actual seams

The full platform boundary, counted.

Open Source

If I solve a problem twice,
it becomes a library.

Every claim below links to a registry · Maven Central · Gradle Plugin Portal · PyPI · Play Store · klibs.io

Nepali Calendar Utils

Python

The same niche, in Python.

Earlier: Music Tag Editor · Projects Demo Labgithub.com/shivathapaa

Plus 5+ internal libraries maintained at work, alongside the public ones above

“When fingers dance on keys, I code with all my might
But when a pen is in my hand, I craft verses through the night.

Shiva Thapa · Developer & Poet · Kathmandu

Writing

Notes from
production.

All articles → medium.com/@shivathapaa · dev.to/shivathapaa

About

The developer
behind the code

KMP/CMP lead in Kathmandu. I build Android and iOS from one Kotlin codebase, Compose UI included, and lead mobile at Pathway Technologies across its products.

I publish libraries to Maven Central, the Gradle Plugin Portal, and PyPI; write on Medium and dev.to; and mentor the team I lead.

The iOS side is Swift where the platform requires it — the @objc Firebase bridge, the Maps integration, the app shell.

Languages

KotlinSwiftPython

UI & Frameworks

Jetpack ComposeCompose MultiplatformSwiftUIKtorKoinFirebase

Tooling & Publishing

Gradle convention pluginsMaven Central publishing

Contact

Building for both platforms
from one codebase?

buildwith.shivathapaa@gmail.com

Open to KMP/CMP consulting, lead roles, and open-source collaboration. I read everything sent here.