Ключевая техническая особенность ecom-инструментов Novex — мобильное приложение работает на общей бэк-части с сайтом и использует единые данные по товарам, остаткам, заказам и пользователям. Об этом более подробно мы рассказали в кейсе «Точка сборки онлайн-ритейла ↗: Поддержка и развитие сложной ecom-платформы на PHP, Nuxt и Flutter».
Общая бэк-часть даёт преимущества:
Flutter: кроссплатформенное приложение сразу под под iOS и Android
Команда NAN
5 человек из команды NAN обеспечивают полный цикл поддержки и развития приложения Novex: от аналитики и проектирования до реализации, тестирования и поддержки
Flutter Developer • DevOps • System Analyst • QA Engineer • UX/UI Designer • Project manager
Со стороны клиента — внутренняя IT-команда и стейкхолдеры.
Проект в цифрах
костылей и технических проблем выявлено и устранено
дня бесперебойной работы приложения (100% всего времени работы с NAN)
выросла выручка в мобильном приложении
SKU в онлайн-каталоге Novex
интеграций с внешними и внутренними системами
релизов обновлений выпустили за более чем 2 года совместной работы
Задачи и результаты
Интегрировали умных поиск для удобства поиска товаров и совершения покупок
Обновили дизайн карточек товаров, чтобы сделать их более привлекательными и информативными
Для повышения лояльности пользователей, разработали интеграцию с сетью пунктов выдачи заказов ПВЗ СДЭК
Польза для бизнеса
за счёт повышения стабильности приложения и устранения критических узких мест
за счёт честного отображения наличия и условий получения товара.
сократив количество неопределённых состояний и ожиданий
новые функции добавляются без накопления технических рисков.
Детали реализации
Это стало первым приоритетом: мобильное приложение должно работать предсказуемо при росте нагрузки и активном использовании каталога.
В ходе анализа выявили, что часть проблем с производительностью связана не с серверной логикой, а с работой мобильного клиента — в частности, с загрузкой и кэшированием изображений. Приложение загружало изображения большего размера, чем требовалось интерфейсу, это приводило к задержкам и визуальным сбоям при скролле каталога.
Мы пересобрали логику работы с изображениями и кэшированием, приведя её в соответствие с реальными потребностями UI. В результате интерфейс стал восприниматься как быстрый и стабильный, без «пустых» состояний и подвисаний.
Параллельно была выявлена и устранена причина крашей приложения, связанная с утечками памяти на фронтенде (некорректная работа EventBus и IntersectionObserver). Подробнее мы рассказывали об этом здесь ↗.
В результате проведённых работ:
По итогам изменений наш клиент отметил, что приложение стало работать быстрее, чем когда-либо ранее.
Когда мы зашли на проект, вместе с кодовой базой нам досталась и настроенная ранее CI/CD-схема. Формально она позволяла собирать и выкатывать релизы через скрипты, но была сильно завязана на прежнюю инфраструктуру и процессы. В текущем контуре часть сценариев не работала корректно, а сама схема оказалась избыточно сложной.
Мы разобрали существующую конфигурацию, адаптировали её под нашу среду и упростили релизный процесс. Часть логики переписали, часть — оптимизировали, чтобы сборка и выкладка были предсказуемыми и не требовали лишних действий.
В итоге релизы стали проходить стабильнее и быстрее, а процесс выкладки — понятным и управляемым для команды.
*CI/CD (Continuous Integration / Continuous Delivery) — это практика автоматизации сборки и публикации релизов, которая позволяет ускорять обновления и снижать количество ошибок при выкладке.
Для крупного дрогери-ритейла поиск — один из ключевых инструментов продаж. Ассортимент большой, пользовательские запросы часто неточные и небрендовые.
В мобильное приложение был интегрирован сервис SearchBooster через API, так как SearchBooster не предоставляет готовый поисковый виджет для Flutter.
Цель разработки — предоставить пользователям сайта и мобильного приложения более качественный поиск и удобный интерфейс, а также начать собирать данные для анализа и улучшения поиска.
Реализованы:
Интерфейс подсказок содержит несколько типов подсказок в окне поиска: история поиска пользователя, подсказки по началу ввода, категории, бренды, товары.
Результаты поиска дополнительно учитывают наличие товаров, чтобы пользователь видел релевантные позиции, доступные к покупке.
Так как сервис платный и тарифицируется по количеству запросов, была доработана логика ввода: добавлена задержка перед отправкой запроса, чтобы не выполнять непродуктивные запросы, а значит, избежать лишней нагрузки и неоправданных расходов.
Карточка товара — ключевая точка принятия решения.
Мы пересобрали её структуру, убрав перегруженность и лишние визуальные блоки. Вместо табов использовали раскрывающиеся секции: описание и характеристики открываются по запросу пользователя, не перегружая экран.
Это снизило когнитивную нагрузку и сделало сценарий выбора товара более понятным и быстрым.
В крупном ритейле наличие товара всегда контекстно и зависит от региона, конкретного магазина и способа доставки. Ранее пользователь сталкивался с ограничениями уже на этапе оформления заказа: выбор способа получения был доступен только на главной странице и в чекауте, а информация о наличии — фрагментарной.
Мы расширили и переосмыслили логику работы с наличием:
Для внедрения новой логики:
На детальной странице появился блок «Наличие товара», который включает:
В результате пользователь сразу видит актуальную картину по наличию и доступным способам получения товара, понимает, где и как может оформить заказ, и не сталкивается с неожиданными ограничениями на финальных шагах.
Выполнено:
Основная сложность заключалась не во фронт-части, а в согласовании логики на бэкенде, чтобы все сценарии выбора работали корректно и стабильно.
Заключение
Мобильное e-commerce-приложение при большом ассортименте и высокой нагрузке — это не набор экранов, а критически важный бизнес-инструмент.
В этом проекте мы сосредоточились на главном: стабильности, предсказуемости и управляемом развитии продукта, где каждое изменение усиливает систему, а не создаёт новые риски.