2 000 000
Развлечение и спорт
iOS, Android
Декабрь 2025
Заказчик — B2B-платформа корпоративных скидок для сотрудников крупных компаний (проект под NDA). Более десяти партнёров — банки, ритейлеры и IT-корпорации. Совокупная численность сотрудников — более 500 000 человек.
У клиента уже были работающий сайт и бэкенд на REST API, но не было мобильного приложения. Это ограничивало использование бонуса: сотрудники не могли быстро активировать скидки со смартфона, ценность предложения снижалась.
Исходная задача: разработать кроссплатформенное мобильное приложение для iOS и Android с закрытой авторизацией по инвайт-кодам.
В процессе выявились три скрытые проблемы:
1. Задержка бэкенда. Бэкенд доделывали параллельно с фронтендом. Фронт-команда могла простаивать неделями — прямой сдвиг сроков и дополнительные затраты.
2. Изменение требований. В середине проекта выяснилось, что заказчику нужно не одно приложение, а три брендированные версии для разных групп партнёров. Каждая со своим логотипом, цветовой схемой и адресом сервера.
3. Интеграция чата без SDK. В приложении требовался встроенный чат поддержки. Внешний сервис LifeText не имел SDK для Flutter. Без обратной связи пользователи не могли оперативно решать проблемы — снижение конверсии.
Цель: запустить три брендированных мобильных приложения в магазинах, обеспечить стабильную работу и заложить архитектуру, готовую к масштабированию.
Мы спроектировали систему, которая решает все три проблемы одновременно, и заложили архитектуру, готовую к изменениям.
1. Flutter как основа
Выбрали Flutter — он позволяет вести единую кодовую базу для iOS и Android. Любая доработка пишется один раз и работает на обеих платформах. Без Flutter пришлось бы разрабатывать два отдельных приложения — на Swift и Kotlin — с двойными затратами.
2. Flavors — один код для трёх приложений
Настроили систему сборки Flavors. При сборке подставляются разные параметры: название, иконка, цветовая схема и адрес сервера. Весь процесс автоматизирован. Одна доработка — и все три версии получают обновление одновременно.
3. Мок-данные — работа без бэкенда
Пока бэкенд задерживался, подготовили локальные тестовые данные (мок-данные), имитирующие ответы сервера. Это позволило сразу начать разрабатывать интерфейс и логику, не дожидаясь готового бэкенда. Когда сервер доделали, переключились на реальные запросы за один день.
4. Чат через WebSocket
Для чата использовали внешний сервис LifeText. У него не было готового решения для Flutter, поэтому мы подключились к сервису напрямую через WebSocket — настроили канал для обмена сообщениями в реальном времени, передали данные пользователя и настроили приём уведомлений. Всё сделали сами, без готового SDK.
5. Производительность
Приложение выросло до 50+ экранов. Настроили приоритеты загрузки, чтобы списки не тормозили даже при быстром скролле, а картинки подгружались без задержек.
Процесс работы:
Работали по гибкой методологии с двухнедельными спринтами. Ежедневные стендапы, код-ревью, тестирование на реальных устройствах. Коммуникация с заказчиком и командой бэкенда — через общий чат и регулярные созвоны.
Ключевой момент: когда в середине проекта изменились требования (одно приложение → три), мы не стали переписывать всё с нуля. За несколько дней перестроили систему сборки, настроили Flavors и адаптировали CI/CD. Дополнительные затраты оказались минимальными, график почти не сдвинулся.
Три брендированных приложения одновременно вышли в Google Play и App Store.

Для бизнеса:
Любая новая фича пишется один раз и доступна всем трём версиям — экономия на поддержке до 70%
Добавление четвёртой или пятой версии не требует изменения кода — только настройки параметров сборки
Краш-рейтинг менее 1%, жалоб на производительность не поступало
Проект занял около шести месяцев, заказчик принял работу без нареканий
Для пользователей:
Мгновенный доступ к скидкам в два клика
Чат-поддержка в реальном времени
Плавная работа без зависаний
![]()
Елена Назарова
«Этот проект — хороший пример того, как правильно спроектированная архитектура спасает, когда требования меняются уже в процессе. Мы начинали с одного приложения, а в середине выяснилось, что нужно три — с разными брендами и серверами. Если бы мы изначально пошли по пути трёх отдельных проектов, поддержка превратилась бы в ад. Но мы выбрали Flutter и настроили сборку так, что один код обслуживает все версии.
Сейчас, чтобы добавить новую фичу, мы пишем её один раз, а получают все три приложения. Заказчик доволен, проект в поддержке, пользователей уже больше ста тысяч. Для нас это ещё одно подтверждение: гибкая архитектура — это не про технологии, а про экономию денег и времени для бизнеса».