← Projects

Bethowen mobile app

Android client for the corporate portal, built on Kotlin Multiplatform

Problem
Sales staff and store managers can't comfortably open the web portal mid-shift — the phone is always at hand, a laptop is not. They need a native client for the same cabinet — the Bethowen corporate portal (lk.petretail.ru): bonuses, vacations, store chat, order pickup — with the role model and permissions intact.
What I built
Kotlin Multiplatform: the shared module holds Ktor Client, kotlinx.serialization, SQLDelight, repositories, auth with silent session refresh and forced logout, and a TipTap→HTML converter — logic ready to be reused on iOS. The UI is Jetpack Compose + Material 3: type-safe navigation, ViewModel/Flow, Koin, Coil 3, light and dark themes, minSdk 26. It speaks the same bearer API as the web, gets realtime over SSE, push over FCM, and keeps an owner-scoped offline cache of news and notifications. A Data Matrix (KIZ) scanner runs on an on-device ML Kit model with no network download, plus deep links and verified sideload APK updates (SHA-256, package, versionCode).
Result
All 16 vertical stages of the port are closed with runtime QA: news with reactions and comments, personal bonuses and store analytics, vacations, polls, notes, chat, gigs, flea market, feedback, an HR section and order pickup with the KIZ scanner, plus push, offline cache and verified APK updates — at parity across all 55 web routes and five roles. Development is AI-driven (Codex + Claude): architecture, stage breakdown and review are mine. Distribution is a sideload APK published from the portal admin; iOS is the next stage on the same shared module.
Home with role-based sections, and a news post with reactions and comments
Personal daily bonuses and store analytics: receipts, line items, period-over-period comparison
Team vacation calendar with approval statuses, and store chat with a pinned message
A poll with live results; on the right — the same app in dark theme