sabbir.khan

Projects

Work that shipped — and how it was built.

Two kinds of proof. Case studies that show the whole system — what was built, which components talk to which, the hard engineering problem, and Android’s role inside it. And public work you can install or read the source of today.

Tier one

Case studies

Avetics Global

Volarious & V-Assist — Real-Time Aircraft Control from Android

  • Kotlin
  • Jetpack Compose
  • Hilt
  • Coroutines · Flow
  • Multi-module
  • MVVM · MVI
  • Firebase
  • Google Play
  • DJI Mobile SDK

The domain is drones. The work is systems engineering delivered through senior Android craft — modular architecture, Compose UI, real-time state, dependency injection, theming and store releases, wired to live hardware over a vendor SDK and a TCP telemetry link. Every one of those skills transfers to your product.

Problem
Two Android products for Avetics Global, running side by side on the same rugged tablet: Volarious, the operator’s control app, and V-Assist, the companion for tethered-power operations. Between them it is the brief any serious Android app carries — authentication, a live telemetry dashboard, light and dark themes, device settings, a system overlay, error and recovery states, Play Store releases — with one twist that shapes every decision: the data arriving over the socket is a live aircraft, so late data is useless data.
The system
DJI aircraft · tether station          (live hardware)
     ↕  DJI Mobile SDK — video feed · flight control
     ↕  custom TCP sockets — real-time telemetry
Android controller — Volarious & V-Assist
     ·  Compose dashboards · system overlay · QR detect-track-land
     ↕  Firebase — auth · sessions · remote device config
Backend services
My role
Senior Android Engineer. I owned the ground-up architectural rewrite, built features across both apps, and set the engineering standards the 6-person Android team worked to.
Architecture & tech
  • Multi-module architecture with MVVM and MVI, adopted as the team-wide standard across both apps
  • Jetpack Compose with a full dark/light theming pass — the same dashboard has to be readable at night and in direct sunlight
  • Hilt for dependency injection; Kotlin Coroutines and Flow for all asynchronous state
  • Custom TCP socket layer feeding the live telemetry dashboard — the same problem as any real-time app, on a latency budget where late is the same as wrong
  • Firebase authentication and realtime database; sign-in, sessions and remote device configuration
  • A system-overlay window so the telemetry widget stays on top of whatever else is running on the device
  • Vendor SDK integration (DJI Mobile SDK) for the camera feed and hardware control, plus the codec and rendering pipeline behind it
  • Google Play release engineering, and an AI-assisted workflow (Claude Code, Gemini CLI, Cursor) embedded in the team’s daily practice

The hard problem · Real-time computer vision without giving up image quality

V-Assist’s premium feature was already marketed and the release date was fixed: detect a QR code on the live camera feed, track it, and land on it. Close to release it was failing — at high image quality the detection lagged behind the feed. The obvious move was to drop the quality and ship. Instead I profiled the pipeline line by line and found the bottleneck was the video codec and rendering path, not the detection at all. Working from the codec documentation I rebalanced decoding against rendering, so the feed kept its quality and scanning ran in real time. It is the same class of problem as any Android app dropping frames under load — just with a physical consequence if you get it wrong.

Outcome

  • Both apps in active production use today
  • Team-wide architecture standards that measurably improved maintainability and onboarding speed across a 6-person Android team
  • V-Assist published on Google Play, with its premium feature shipped on the marketed release date
  • AI-assisted development workflow embedded into the team’s daily practice

Both apps, on the device

The device launcher showing the Volarious and V-Assist app icons side by side, with V-Assist’s floating telemetry widget pinned over the wallpaper showing tether length, tension and satellite count.

Both apps on one device — with V-Assist’s telemetry widget drawn as a system overlay above the launcher.

The Volarious launch screen reporting an aircraft connected on an M30-series drone, with the app version and DJI SDK version printed along the bottom.

Volarious completing its handshake with the hardware over the vendor SDK.

V-Assist flight view: a live camera feed over an urban construction site with tether length and tension gauges overlaid, alongside takeoff, plan and return controls and a map inset.

Live feed with the telemetry overlay, mission controls and map inset, mid-operation.

The V-Assist telemetry dashboard in dark theme, showing tether length, tension, satellite count and power gauges plus temperature and odometer readouts.

Telemetry dashboard, dark theme — for night operations.

The same V-Assist telemetry dashboard in light theme, showing tether length, tension, satellite count and power gauges.

The same dashboard, light theme — one theming layer, two very different lighting conditions.

The V-Assist account screen with empty email address and password fields, a forgot-password link and a log-in button.

Firebase-backed sign-in and session handling.

The V-Assist settings screen listing device maintenance actions — tare cable, toggle screen, format storage, silent mode — each with its own action button, and the connected unit’s serial number.

Device settings: remote configuration and maintenance actions, driven from the app.

GrowFolio (formerly Plentina) · Feb 2022 – Nov 2022 · Remote (US)

Plentina — Buy Now, Pay Later

  • Jetpack Compose
  • Kotlin Flow
  • KMM
  • Payments
  • Fintech
Problem
A US fintech startup expanding BNPL credit access across the Philippines and Vietnam needed its Android app to move fast in two markets — with payment flows that simply cannot fail.
My role
Led Android development of the Plentina BNPL app.
Architecture & tech
  • Jetpack Compose UI with Kotlin Coroutines
  • Kotlin Flow for complex asynchronous state management — eliminated callback-chain patterns
  • Multiple third-party payment gateway integrations in the core purchase flow
  • The full BNPL lifecycle in-app: partner catalogue, offer eligibility states, voucher redemption and repayment scheduling
  • Early Kotlin Multiplatform (KMM) R&D infrastructure and Firebase Cloud Messaging

The hard problem · Migrating to Compose while Compose was in beta

I converted the entire XML-based UI to Jetpack Compose when the toolkit was still in beta — no established patterns, shifting APIs, and a live fintech product that couldn’t regress. It paid off: the app got a modern, declarative UI layer years ahead of most fintech apps in the region.

Outcome

  • Live in two Southeast Asian markets with trusted retail and payment partners
  • Installment-based commerce enabled for users underserved by traditional credit
  • Cleaner async architecture adopted across the codebase

From the app

Plentina home screen: a row of loan partner logos, a promotional carousel offering a personal loan, and eligible pay-later offers from Smart and National Book Store priced in Philippine pesos.

Partner catalogue, promo carousel and the offers a given user is eligible for.

Plentina offer detail screen for Steam Wallet credits priced in Philippine pesos, with a Play now pay later banner, offer requirements and a claim button.

An offer detail, with eligibility resolved and ready to claim.

Plentina voucher screen after claiming an offer: the issued voucher code with a copy button, redemption steps, and the next repayment date and amount above a repay-now button.

Claimed: voucher issued, redemption steps, next repayment scheduled.

Plentina My Loans screen listing completed instalment plans from partner retailers National Book Store and Birdhouse, each marked paid or cancelled with its repayment count.

Instalment history across real retail partners.

Samsung R&D Institute · Oct 2019 – Feb 2022 · Dhaka

Samsung Health & WearOS

  • Kotlin
  • WearOS
  • BLE
  • Room
  • Tizen
  • iOS (SmartThings)
Problem
Samsung’s consumer health ecosystem spans phones, wearables and servers. Health data has to stay consistent across all three — including watches running a completely different OS (Tizen).
The system
Samsung Health servers
     ↕  server-side synchronisation
Android phone — health-tracking apps · Room persistence
     ↕  BLE — lossless transfer · explicit retry policy
Samsung watches — WearOS & Tizen companions
My role
Lead Software Engineer II. I built health-tracking Android applications and their WearOS companions inside Samsung’s consumer wellness product line, and contributed features to the SmartThings iOS app.
Architecture & tech
  • Health-tracking Android apps with server-side synchronisation
  • Local persistence with Room
  • WearOS companion apps for health activity monitoring
  • Cross-platform contribution: feature development in the SmartThings iOS application

The hard problem · Lossless phone-to-watch sync over BLE

Sending health data from an Android phone to a Tizen-based Samsung watch had to be lossless — a dropped packet means corrupted health history. I designed the transfer around BLE with an explicit retry policy, maintaining connectivity guarantees across two different operating systems.

Outcome

  • Shipped within Samsung’s consumer health ecosystem, used at consumer scale
  • Extended the health platform to wearable devices
  • Proved cross-platform range by shipping iOS features alongside Android

Kutumbita · 2018 – 2019

Kinship.ai — Workplace Assistant for the Factory Floor

  • Android
  • Offline-first sync
  • WorkManager
  • Socket.io
  • FCM
  • Real-time chat
  • Play Store release
  • Solo build
Problem
Bangladesh’s garments industry employs hundreds of thousands of floor workers whose only route to HR is a queue and a paper form. Kinship.ai replaced it with a chat thread: ask the assistant a question, report a broken machine with a photo, apply for leave, check salary or attendance — in the moment, on the cheap Android phone already in their pocket.
The system
Factory floor — low-end Android phones · unreliable networks
     ↓  every submission written to local storage first
Android app — chat UI driving structured HR workflows
     ↕  background sync when a connection returns (WorkManager)
     ↕  Socket.io real-time messaging · FCM while the app is closed
Backend — leave, salary, attendance, issues, announcements
My role
I designed and built the Android app entirely on my own — architecture, implementation and Play Store release.
Architecture & tech
  • Real-time messaging over Socket.io, with Firebase Cloud Messaging covering delivery while the app is closed
  • Conversational UI that drives structured workflows — leave requests, issue reports, feedback — out of an ordinary chat thread
  • Camera capture and photo upload so an issue can be reported with evidence from the floor
  • A self-service directory behind a single tap each: feedback, issues, leave, salary, attendance, policy, learning, health and insurance
  • Offline-first by necessity: everything the worker submits is written to local storage first, then reconciled with the server by a periodic background sync when a connection returns
  • Built for low-end devices and unreliable networks — the phones and connectivity the workforce actually has

The hard problem · Offline-first, on scheduling APIs that had only just shipped

The garments workers this was built for barely had internet, so nothing in the app could assume a connection. Every message, issue report and piece of feedback had to be saved to the device first and reconciled with the server later, whenever a network appeared. That put the whole product on background scheduling — and Google had only just introduced JobScheduler and WorkManager. The APIs were new and still buggy, with no established patterns to copy from. I got it to flawless the hard way: testing continuously against the real failure cases — the connection dropping mid-sync, the process killed between runs, work resuming after a reboot — until a worker never had to think about syncing at all. Nothing was lost, and nothing had to wait for a signal to be recorded.

Outcome

  • Designed, built and released to Google Play by one engineer, end to end
  • Put HR self-service in workers’ hands — feedback, issues, leave, salary, attendance, policy and benefits, all from one thread
  • No longer listed on the Play Store; the images below are its original store graphics

From the store listing

Kinship.ai store graphic headlined “Message our chatbot any time, 24/7”, showing the app home screen greeting an employee and inviting a request such as needing leave.

The assistant, open around the clock.

Kinship.ai store graphic headlined “Give feedback, report an issue or apply for leave”, showing a grid of shortcuts for feedback, issues, leave, salary, attendance, policy, learning, health and insurance.

Nine HR workflows, one tap each.

Kinship.ai store graphic headlined “AI powered workplace assistant providing instant responses”, showing a chat where a worker reports damaged machinery that has stopped the line and is offered a photo upload.

Reporting a stopped production line — with a photo attached.

Kinship.ai store graphic headlined “All factory communication in one place”, showing an inbox of dated messages each tagged admin, announcement, news or event — salary disbursed, a gate closure, a fire-safety training session and an inspection notice.

One inbox for the whole factory — admin, announcements, news and events.

Kinship.ai store graphic headlined “Your work profile, salary, insurance and health records all on mobile”, showing a worker’s profile screen listing designation, position, job type, employer, contact number, addresses, joining date, emergency contact, national ID and blood group.

The worker’s own record — employment details, contacts and health data, in their pocket.

Tier two

Public work — install it, read it

The bracket engine for FIFA’s new 48-team World Cup

Football Predictor 2026

  • Kotlin
  • Algorithm Design
  • Offline-first
  • IAP
  • Adaptive UI

FIFA’s 2026 format is new and genuinely hard: 48 teams, 12 groups, and a Round of 32 where third-placed qualifiers depend on results across every other group. I designed an engine that evaluates 450+ valid bracket combinations and recalculates the entire knockout tree in real time as you fill in results — following the official FIFA regulations to the letter. What takes analysts spreadsheets, the app does instantly, 100% offline.

  • Auto-calculates the Round of 32 from 450+ bracket combinations, live as you predict
  • 100% offline — no account, no network needed
  • Dark and light mode; adaptive layouts for phones, tablets and foldables
  • One-time Pro purchase: saved prediction profiles, QR bracket sharing and head-to-head comparison
  • 1K+ downloads on Google Play

From the app

Football Predictor 2026 group stage screen: Safe, Bold and Wildcard prediction-profile chips above a two-column grid of group cards, each listing four national teams with flags and the predicted 1st, 2nd and 3rd placings highlighted. The header reads 12/12 groups and 8/8 thirds.

All 12 groups predicted — and the eight qualifying third-placed teams resolved.

Football Predictor 2026 knockout screen showing a bracket tree linking Round of 32 fixtures to the Round of 16, each match card carrying both teams with flags, a tick against the predicted winner, and the kickoff date, time and host city beneath. A counter reads 4 / 30 knockout matches decided.

The bracket redraws itself as results go in — each tie carrying its real date, time and venue.

Football Predictor 2026 final screen: a celebratory champion card showing Norway’s flag beneath a trophy and bunting, above cards for the final — Netherlands versus Norway at MetLife Stadium, East Rutherford — and the third-place playoff between Austria and Argentina.

The end of the tree: a predicted champion, the final, and the third-place playoff.

Football Predictor 2026 share screen with the champion card above an Export Your Prediction panel offering Share as Image, Show QR Code, Copy Prediction Code and Scan QR Code.

Export a finished bracket as an image, a QR code, or a code someone else can scan in.

The “how I write code” exhibit — read the source

GitHub Client

  • Multi-module
  • Compose M3
  • MVVM
  • Hilt
  • Ktor
  • Room
  • Tests

An open-source Android app I keep public for one reason: so you can see exactly how I structure production code. Multi-module clean architecture (app / features / common / network / storage / theme), unidirectional state, offline support, and real tests — not a toy repo.

  • Jetpack Compose Material 3 with adaptive ListDetailPaneScaffold for tablets and foldables
  • MVVM with Hilt DI, Ktor networking, Room offline cache
  • Debounced live search with StateFlow; custom shimmer built without external libraries
  • Unit + UI tests: mockk, espresso, compose-ui-test, coroutines-test
  • Version catalog (libs.versions.toml) and Spotless formatting

Want this on your team — or on your product?

Get in touch →