03 · Logistika Urbana · native Android & iOS

A point of sale that keeps selling when the network does not.

The counter and the road side of the Logistika Urbana platform: a native Android point of sale for the store counter, native Kotlin and SwiftUI apps for delivery drivers, and smaller in-store tools. They all talk to the same backend, so a counter sale, a web order and a delivery all move the same stock.
Role
Technical Lead (contract)
Period
Dec 2024 — present
Engagement
Remote contract
Team
Led the mobile and POS developers in 2024–25
Location
Mexico City · from Lahore
of 171 commits on the Android POS
144
of 147 commits · Kotlin driver app
147
of 87 commits · SwiftUI driver app
87
native apps: POS, 2 driver apps, kiosk, store ops
5

counted, not estimated · no client business metrics

01Context

The ERP is the back office. These apps are what people on the shop floor and on the road actually touch: cashiers at a store counter, drivers delivering orders, and staff looking up and receiving stock.

The POS sells the same catalogue as the Yoon Lab website, from the same stock. The physical store is not a separate business with its own system. It is the same inventory, reached from a counter instead of a browser.

02The problem

A point of sale is the one system in a retail business that cannot go down. Connectivity in a store is not guaranteed, and a terminal that stops taking payments when the network drops costs money at the counter.

It also has to be trusted. A shared tablet must know which warehouse it belongs to and who is using it, without a full login for every sale. And it has to drive hardware (a receipt printer, a scanner, a customer display) that does not behave like a browser API.

03Architecture
fig. 01counter · sync · road
STORE COUNTER · ANDROID TABLETPOS appkotlin · composeRoom DBticket written firstWorkManagersync when onlineStar TSP100IIIreceiptsCustomer displayusbScannerbarcode · qrPIN per shiftpaired to warehouseintermittent networktickets kept on-device until syncedONE BACKEND · SAME STOCKDjango APIorders · inventoryChannelswebsocketsOSRMroad-distance dispatchON THE ROADDriver · Androidkotlin · composeDriver · iOSswiftuiTwilio Voicemasked callsPushfcmlive location · jobsSTORE TOOLSLookup kioskml kit · voice searchStore Ops · iOSbuilt · not deployedSHARED WITH THE WEByoonlab.mxsame catalogueAdminshifts · cash · devices
04What I built
  1. 01

    Offline-first by design

    The POS is Kotlin and Jetpack Compose, with a Room database on the device. Each ticket is written locally first and synced by WorkManager when the network is available, so a dropped connection does not lose a sale.

  2. 02

    Device pairing and a PIN per shift

    A tablet is registered once by a device hash and bound to one warehouse. After that, staff sign in with a short PIN for each shift, not a full login for each sale.

  3. 03

    Real counter hardware

    The app drives the peripherals directly: a Star Micronics TSP100III receipt printer, a USB customer display, and barcode and QR scanning.

  4. 04

    The end of the day, not only the sale

    The work at a counter does not end at payment, so neither does the app.

    • Shift open and close with cash-drawer reconciliation, pay-in and pay-out tracking
    • Refunds against an existing receipt, and email receipts
    • A driver handover flow for delivery orders, cash collection and restock
    • Crash reporting with Sentry; signed releases through the Play Store pipeline
  5. 05Dec 2025 – Mar 2026

    Native driver apps on both platforms

    I rewrote the driver apps natively and am the sole author of both current versions: Kotlin with Jetpack Compose, and SwiftUI. They replaced earlier React Native and UIKit apps. Jobs are assigned by road distance, computed on the self-hosted OSRM server.

    • Live location and job updates over WebSockets
    • Masked calls between driver and customer through Twilio Voice (CallKit on iOS)
    • Maps, CameraX for delivery-proof photos, push notifications, English and Spanish
    • Crashlytics, Remote Config and a forced in-app update path on Android
  6. 062026

    Store tools

    Smaller native tools for the store floor: an Android product-lookup kiosk (Compose, ML Kit barcode scanning, a USB scanner, voice search) and a SwiftUI store-operations app for iOS (VisionKit scanning, PencilKit signatures, SwiftData).

05Screens
Logistika Urbana POS · Android tablet
The Logistika Urbana POS sales screen on an Android tablet: a searchable grid of Korean skincare products with category filters, beside an order panel with an add-customer action and the subtotal
fig. 02The counter view: a searchable product grid with category filters, beside the open ticket and its running total.
06Stack
Android
KotlinJetpack ComposeRoomWorkManagerHiltRetrofitCameraXML KitSentryCrashlytics
iOS
SwiftSwiftUIWebSocketsCallKitVisionKitPencilKitSwiftData
Hardware
Star Micronics TSP100IIIUSB customer displayBarcode & QR scanners
Backend
Django ChannelsTwilio VoiceFirebase Cloud MessagingOSRM
07My part
  • 144 of 171 commits on the Android POS (December 2024 to today)
  • Sole author of the current Kotlin driver app (147 commits) and SwiftUI driver app (87 commits)
  • In 2024–25 I led the developers working on the mobile apps and the POS
  • The backend side of every app: the APIs, WebSocket consumers and dispatch logic they call
08Notes for reviewers
  • These are private client apps, so there are no code links. The commit counts are mine, from the git history.
  • The store-operations iOS app is built but not yet deployed (October 2026).
  • I contributed only part of the earlier React Native and UIKit driver apps; the numbers above are for the current native rewrites.
→For hiring teams

Platform, DevOps or AI-platform role? Let's talk.

I build and run production systems on AWS, and I deploy and operate models in them. I'm looking for a senior platform, DevOps or AI-platform role, and I'm relocating to Japan in 2027. A résumé and references are available on request.

Role
Platform & AI Engineer · Technical Lead
Location
Lahore, Pakistan · Relocating to Tokyo · 2027
Languages
English (professional) · Urdu (native) · Japanese (beginner, studying daily)
Email
contact@codewithmuh.com