Flutter on top, native Kotlin underneath

Sajon Shrestha.Mobile engineer in Kathmandu.

Seven products across thirteen Google Play listings, one past 100,000 installs. I own the parts teams usually outsource. A forked native video player, subscription billing and the release pipeline itself.

Classic TechClassic EngineCaro TV NepalDealer PartnerWiPrayJeewit BachanSmartSikshya

On Google Play

110,000+

installs across four Google Play apps for Nepal's fifth largest internet provider, built and maintained as the only mobile developer.

Selected work

WiPray

Faith social and media platform

2026 · Advent Hub, US client through Webpoint SolutionsFlutter · Kotlin and ExoPlayer · StoreKit · Play Billing
  • Ported a live React Native product to Flutter without pausing the feature roadmap. Every media type the client publishes runs through one feed, with a prayer and praise wall beside it.
  • Built the in-app subscription layer, StoreKit on iOS and Play Billing on Android. Entitlement is account bound and checked server side, so a paid user keeps access on a new device.
Google Play↗1,000+ installs

We Preach

Media streaming platform

2026 · US client through Webpoint SolutionsFlutter · Kotlin and ExoPlayer · Platform channels · HLS
  • Flutter from scratch rather than a port. Scoped and designed before a line was written. Christian media for a worldwide audience, and the whole product turns on playback.
  • Background and Picture-in-Picture playback on both platforms. Quality follows the connection, and on a weak network the player drops from video to audio rather than sit and buffer.
In development, not released yet

Classic Tech app portfolio

Four apps for a national internet provider

2023 to 2026 · Classic Tech, Nepal’s fifth largest ISPKotlin · Flutter · Bloc · Riverpod · Android on TV boxes
  • One native Kotlin customer app covering bill payment, router settings, IPTV controls, a complaints channel and referrals. Split it across two internet brands with build flavours, so each ships as its own signed app rather than a forked copy.
  • Built Caro TV, the Flutter mobile app for the company’s live channels, and a second Flutter app inside the set-top box, which answers to a remote and to touch. Tested on real boxes.
Classic Tech on Google Play↗110,000+ across four listings installs

SmartSikshya

Multi-tenant school platform

2025 to 2026 · Independent work, paid, live in schools todayFlutter · Riverpod · WebSockets · Maps
  • Five roles from one codebase. Parent, student, teacher, school admin and a cross-school super admin, which is the multi-tenant control plane.
  • Live GPS vehicle tracking over WebSockets and role-based access control.

All work and store listings›

What I take on

Flutter apps, iOS and Android from one codebase

From a scoped brief to two store listings. Riverpod or Bloc, clean architecture, tested. Seven products of mine are public on Google Play, thirteen listings in all.

React Native to Flutter migration

Two full migrations shipped, one of them alone, on live apps with no quiet release window. Feature by feature, never a big-bang switch.

Video and audio playback

Native player modules behind Flutter platform channels. Adaptive HLS, background audio, Picture-in-Picture, media session controls, playback state that survives a lifecycle change.

Subscriptions and payments

StoreKit and Play Billing with account bound entitlement checked server side. QR payments and wallet flows built for users who had never held a banking app.

Release engineering

GitHub Actions, Fastlane, code signing, TestFlight and Play Console, staged rollouts, Crashlytics. The pipeline is owned, not borrowed.

White-label and multi-brand builds

One codebase, many signed apps. Six school brands and two ISP brands ship this way today, with a script instead of a hand edit per brand.

Now

Software Engineer, Flutter at Webpoint Solutions, Mar 2026 to present.

Leads mobile delivery for the media and social products built for US clients. Reviews the team’s mobile code. Owns the media playback layer two Flutter apps share, a forked native player plugin kept working on Android and iOS, Kotlin and ExoPlayer underneath. The hard part is not playing a file, it is adaptive HLS switching and playback state that survives a lifecycle change.

Read the CV›