← Проекты

Мобильное приложение «Бетховен»

Android-клиент корпоративного портала на Kotlin Multiplatform

Задача
Продавцу и директору магазина неудобно открывать веб-портал прямо со смены: телефон всегда под рукой, а ноутбук — нет. Нужен нативный клиент того же кабинета — корпоративного портала «Бетховен» (lk.petretail.ru): бонусы, отпуска, чат магазина, самовывоз — без потери ролевой модели и прав.
Что сделал
Kotlin Multiplatform: в модуле shared — Ktor Client, kotlinx.serialization, SQLDelight, репозитории, auth с автообновлением сессии и forced logout, конвертер TipTap→HTML; логика готова к переиспользованию на iOS. UI — Jetpack Compose + Material 3: type-safe навигация, ViewModel/Flow, Koin, Coil 3, светлая и тёмная темы, minSdk 26. Тот же bearer-API, что у веба, realtime по SSE, push через FCM, owner-scoped офлайн-кеш новостей и уведомлений. Сканер Data Matrix (КИЗ) на встроенной ML Kit-модели без сетевой догрузки, deep links и проверяемое sideload-обновление APK (SHA-256, package, versionCode).
Результат
Все 16 вертикальных этапов переноса кабинета закрыты с runtime-QA: новости с реакциями и комментариями, личные бонусы и аналитика магазина, отпуска, голосования, заметки, чат, подработки, барахолка, обратная связь, HR-раздел и самовывоз со сканером КИЗ, плюс push, офлайн-кеш и проверяемое обновление APK — с паритетом по всем 55 web-маршрутам и пяти ролям. Разработка AI-driven (Codex + Claude): архитектура, декомпозиция этапов и ревью — на мне. Распространение — sideload APK из админки портала, iOS — следующий этап на том же shared.
Главная с разделами по роли и карточка новости с реакциями и комментариями
Личные бонусы по дням и аналитика магазина: чеки, позиции, сравнение с прошлым периодом
Календарь отпусков команды со статусами согласования и чат магазина с закреплённым сообщением
Голосование с промежуточными результатами; справа — то же приложение в тёмной теме