
мобильное приложение для маркетплейса запчастей спецтехники
cоздание списков с избранными товарами и заявками оформление заказов на товары со склада и предложений с оплатой автоматическое управление остатками на складе
сайт проекта →
design flutter python
e-com
design, mobile, frontend, backend
Вводные данные
Клиент
ООО «Сервис» — компания, специализирующаяся на продаже легковых автомобилей и коммерческого транспорта малой грузоподъёмности. В дополнение к основному ассортименту компания также занимается торговлей автозапчастями и комплектующими — как оригинальными, так и аналогами от проверенных поставщиков. Ассортимент включает:
- новые легковые автомобили различных марок;
- малотоннажные грузовые автомобили для бизнеса;
- запасные части и расходные материалы: тормозные системы, фильтры, шины, аккумуляторы, детали подвески и др.
Проблема
До нашего привлечения проект находился в начальной стадии MVP с участием нескольких сторонних специалистов, что не позволило довести его до полноценного релиза. Компания искала команду, которая сможет:

- полноценно погрузиться в проект на ежедневной основе;
- взять на себя как разработку, так и техническое проектирование;
- предложить грамотные аналитические и архитектурные решения;
- обеспечить стабильную коммуникацию и предсказуемый прогресс.
Клиент ожидал от новой команды не только продолжения работы, но и структурирования проекта, закрытия технических пробелов, появившихся из-за несогласованной работы разных специалистов.
Задача
Создание мобильного приложения — маркетплейса автозапчастей и техники — с учётом:
- сложной бизнес-логики;
- масштабируемой архитектуры;
- кросс-ролевого взаимодействия (один аккаунт = несколько ролей и профилей).
- наработок предыдущей команды
Также стояла задача настройки среды разработки, оптимизации производительности и качества кода.

О проекте
Проект представляет собой мобильное приложение-маркетплейс для торговли автомобилями, автозапчастями и комплектующими. Платформа объединяет покупателей и продавцов, обеспечивая полный цикл операций: от размещения товаров и заявок до оформления заказов, оплаты и отслеживания доставки.
Приложение адаптировано под разные роли пользователей: один аккаунт может включать как профиль покупателя, так и профиль продавца, с возможностью быстрого переключения между ними. Реализованы ключевые разделы для управления товарами, заявками, заказами, корзиной, уведомлениями, чатами и профилем пользователя.
Выбор стека разработки
Выбор стека разработки был частично предопределён ранее — часть архитектурных решений и технологий уже была заложена предыдущими командами.
Мы продолжили использовать эти инструменты, предварительно проведя технический аудит и оптимизацию кодовой базы, а также адаптировав и оптимизировав их под актуальные задачи проекта.
Процесс работы
1.Проектирование

В работе над проектом с нашей стороны участвовала команда из шести человек: два разработчика на Flutter, два backend-разработчика, менеджер проекта и тестировщик. Работа над проектом началась с технического аудита и анализа текущего состояния: команда провела ревизию кода, API и требований, чтобы определить слабые места и риски.
Далее была выстроена новая архитектурная структура, сформированы стандарты разработки и организовано разделение задач между разработчиками.
2.Разработка
Работа над проектом была разделена на четыре этапа:
- Разработка функционала по разделами “Склад” и “Заявки”
- Реализация разделов “Заказы” и “Корзина”
- Интеграция со службами доставки для отслеживания статусов доставки в транспортных компаниях и интеграция с платежными системами для проведения платежных операций
- Реализация разделов “Профиль”, “Уведомления”, “Чаты” и “Обучение”
В первую очередь команда занялась доработкой уже существующего решения, а также реализовала недостающий функционал. Параллельно велась разработка backend-части: было спроектировано и реализовано API, работа с товарами, заказами и ролями.
Раздел «Заявки» является одним из центральных в бизнес-логике приложения — как для продавцов, так и для покупателей. В этом разделе отображаются все входящие для продавца и исходящие для покупателя запросы на приобретение товаров, а также взаимодействие между сторонами сделки.

- Листинг заявок для покупателя и продавца: покупатель видит свои отправленные запросы, а продавец поступившие заявки от всех покупателей. Для продавцов реализованы фильтрация, поиск и сортировка для быстрого ориентирования в большом объёме данных.
- Детальная карточка заявки с информацией о товаре и сторонах сделки с возможностью для продавца добавить заявку в избранное и для покупателя просмотреть все доступные предложения по его заявке.
- Действия по роли пользователя: покупатель может создавать, копировать, отправлять заявки в архив или размещать их под заказ; продавец просматривать листинг, создавать предложения и добавлять заявки в избранное.
- Интерфейс под каждую роль: покупатели и продавцы видят разные кнопки, статусы и сценарии, что упрощает работу и снижает ошибки.
- Организация заявок: покупатели создают папки для удобного управления своими запросами, а продавцы сохраняют подборки по заявкам для фильтрации по заданным параметрам и получения уведомлений о новых релевантных запросах.
Раздел «Склад» позволяет продавцам управлять собственными товарами, добавлять новые позиции, редактировать характеристики и отслеживать наличие. Это один из ключевых модулей маркетплейса, тесно связанный
с функциональностью заявок и заказов.
- Листинг товаров для покупателя и продавца: покупатель видит доступный каталог, продавец собственный ассортимент.
- Детальная карточка товара с описанием, характеристиками и фото; покупатель может сразу добавить товар в корзину.
- Добавление новых позиций на склад и редактирование уже созданных карточек для продавца — обновление цен, фото, описаний, остатков.
- Массовые действия с товарами для продавца: выделение нескольких или всех позиций и выполнение сразу нескольких операций. Для активных товаров — перемещение в архив или в папку; для архивных — возврат в актуальное или удаление.
- Фильтрация, сортировка и поиск по складу для всех ролей — быстрый доступ к нужным товарам даже при большом объёме данных.
- Автоматическое уменьшение доступного количества товара на складе у продавца после оформления заказа на определённое количество данного товара.
- Организация каталога: продавцы могут создавать папки для группировки ассортимента, а покупатели подборки товаров под свои интересы.
Раздел «Заказы» обеспечивает полный цикл обработки покупок, начиная от момента оформления заказа до его получения.
- Просмотр заказов: пользователи видят все активные и завершённые заказы, что позволяет отслеживать историю покупок и статусы текущих заказов.
- Детальная карточка заказа: содержит информацию о товарах, покупателе/продавце и текущем статусе, что облегчает контроль и обработку каждого заказа.
- Подтверждение получения товара: при самовывозе покупатель и продавец фиксируют факт передачи, обеспечивая прозрачность и точность расчётов.
- Изменение статусов: статусы обновляются автоматически (для доставки) или вручную (для самовывоза), что обеспечивает актуальную информацию для всех участников.
- Добавление накладных: продавцы должны прикреплять сканы ТТН для контроля отправлений и подтверждения отправки.
- Способы доставки: «Самовывоз» и «Доставка до ПВЗ» с отображением актуального состояния заказа и возможностью выбора удобного варианта получения.
- Отмена заказов: заказы могут быть отменены вручную пользователями или автоматически системой при несоблюдении сроков оплаты, отправки или получения, что поддерживает актуальность данных и снижает нагрузку на участников.
- Сложная бизнес-логика формирования заказов из корзины, с учётом группировки по продавцам;
- Привязка заказов к конкретному аккаунту и роли — доступ и действия строго разграничены;
- Синхронизация с разделами «Заявки» и «Склад»: зарезервированные товары помечались, а при подтверждении — списывались с остатка;
- Система уведомлений по изменениям статуса заказа;
- Статусная система с возможностью трекать каждый этап — от оформления до завершения.

Раздел «Корзина» реализован как инструмент для покупателей, позволяющий собрать интересующие позиции от разных продавцов перед оформлением заказа. В корзину можно добавлять товары продавцов
со склада и предложения продавцов по заявкам.
- Добавление товаров и предложений: покупатели могут добавлять товары со склада и предложения по заявкам для оформления заказа.
- Изменение и отмена заказа: покупатель может корректировать количество товаров или полностью удалять позиции из корзины до оформления заказа.
- Проверка доступности: система автоматически проверяет наличие товаров у продавцов, предотвращая оформление недоступных позиций.
- Оформление заказа: покупатель может оформить заказ на все позиции из корзины, система автоматически подставляет данные профиля, позволяет выбрать способ доставки («Самовывоз» или «Доставка до ПВЗ») и обеспечивает контроль остатков товаров.
- Сохранение корзины между сессиями: корзина сохраняется при выходе из приложения или переключении аккаунтов и ролей, что обеспечивает непрерывность работы.
- Корзина синхронизировалась с backend и локальным хранилищем;
- Реализована логика восстановления корзины после выхода или переключения аккаунта;
- Применялось кэширование и оптимизация перерисовок при изменении состояния.
Интеграция с транспортными компаниями
Для автоматизации логистики и повышения удобства пользователей была реализована интеграция с транспортными компаниями. Это позволяет отслеживать заказы на всех этапах доставки прямо внутри платформы
— без необходимости переходить на сторонние сайты перевозчиков.
- Продавец указывает транспортную компанию и трек-номер при оформлении отправки;
- В карточке заказа отображаются сведения о перевозчике и текущий статус доставки;
- Покупатель получает актуальную информацию о перемещении заказа в режиме реального времени;
- Поддержка уведомлений об изменении статуса доставки;
- Информация обновляется автоматически через API транспортной компании.
- Интеграция реализована через REST API ведущих транспортных компаний;
- Система периодически запрашивает обновления по активным трек-номерам;
- Реализована проверка и обработка ошибок в случае недоступности API;
- Возможность масштабирования под новых перевозчиков без изменения бизнес-логики.
Интеграция с платежными сервисом

- Проверка валидности реквизитов продавца (ИНН, КПП, БИК и т.д.) при регистрации, чтобы избежать проблем с выплатами;
- Автоматическое создание бенефициаров на стороне банка для каждого продавца;
- Обработка возвратов, отмен и частичных выкупов с соблюдением требований банка;
- Интеграция через API с обязательной криптографической подписью (RSA);
- Прозрачный процесс для пользователя: все средства доставляются только после успешной проверки и идентификации.
- Подключение эквайринга через API Точка Банка с поддержкой агрегированных платежей;
- Учет возвратов: при частичном или полном возврате суммы корректировались данные внутреннего баланса продавца;
- Защита от повторной обработки: система исключала дублирование поступлений при повторной отправке данных со стороны банка;
- Автоматическая сверка платежей с заказами на стороне платформы;
- Реализация сценариев на случай ошибок при проведении платежей или отмен.
Раздел «Профиль» — это центральная точка управления учётной записью пользователя, включающая доступ к данным аккаунта, балансу, документам, обучающим материалам и службе поддержки. Он адаптирован под разные сценарии использования и различается в зависимости от текущей роли (продавец / покупатель) у выбранного аккаунта.
- Раздел “Информация”: просмотр и редактирование данных аккаунта: название организации, ИНН, платежные и контактные данные, и т. д.;
- Раздел “Техника”: управление карточками техники пользователя, создание новых карточек, редактирование и удаление существующих;
- Раздел “Мой рейтинг”: отображение текущего рейтинга пользователя на основе отзывов других пользователей, просмотр всех отзывов;
- Раздел "Баланс": отображение текущих средств, истории операций и возможность вывода средств;
- Раздел "Техническая поддержка": создание заявки для обращения в техподдержку;
- Раздел “Партнерская программа”: отображение персонального промокода по реферальной программе, просмотр списка существующих рефералов пользователя;
- Раздел “Инструкция/обучение: доступ к обучающим материалам и документации;
- Раздел “Документы”: доступ ко всем юридическим материалам, связанным с использованием платформы.
- Персонализированный интерфейс: в зависимости от выбранного типа аккаунта в профиле отображаются только релевантные поля;
- Разная логика оформления и оплаты заказов: для юрлиц предусмотрены безналичные расчёты и выставление счетов, для физлиц только онлайн-оплата;
- Разграничение механизмов вывода средств: юридическим лицам средства выводятся на расчётный счёт, физическим лицам на карту;
- Каждый пользователь получает уникальный реферальный промокод, который можно передать другим людям.
- Новый пользователь указывает промокод при регистрации. Это закрепляет его как реферала за пригласившим.
- После того как реферал оформляет свой первый заказ, пригласившему пользователю начисляется 1% от суммы заказа на внутренний баланс.
- Все данные и действия в профиле были строго привязаны к текущему активному аккаунту и роли — это исключало возможность случайного вмешательства между контекстами;
- Были реализованы проверки прав доступа к определённым разделам в зависимости от роли.
Роли продавца и покупателя
- Управлению текущим активным профилем: четкое определение и поддержка данных для выбранной в данный момент комбинации «аккаунт-роль».
- Хранению и изоляции данных: надёжный механизм для сохранения, загрузки и очистки данных при переключении между аккаунтами и ролями, чтобы информация одного профиля не смешивалась с другим.
- Синхронизации состояния между сессиями: обеспечение согласованности данных о выбранном аккаунте и роли между:
- Адаптации интерфейса и функционала: мгновенное отображение соответствующего интерфейса, контента и доступных функций в зависимости от currently active (текущей активной) роли (покупатель или продавец).
- Чётко разделить логику отображения и поведения интерфейса в зависимости от роли;
- Избежать повторной авторизации при переключении аккаунтов и ролей;
- Гибко управлять состоянием приложения и кэшированием данных;
- Синхронизировать контекст между несколькими вкладками или устройствами.
- На стороне мобильного приложения логика работы с ролями была реализована с учётом BLoC-архитектуры: переключение между аккаунтами инициировало соответствующие события и пересоздавало нужные состояния.
- Для корректной работы реализовано жёсткое разделение данных по ролям и аккаунтам — это исключает отображение некорректной информации и защищает от конфликтов при одновременной работе с несколькими вкладками или устройствами.
- Все действия пользователя (например, добавление в корзину, отправка заявки, открытие чата) выполнялись в контексте активного аккаунта и роли — при переключении контекста происходит полная перегрузка связанных данных и интерфейсных компонентов.
Раздел «Уведомления» был разработан для оперативного информирования пользователей о событиях, связанных с их аккаунтами, заказами, товарами, заявками и чатом. Уведомления позволяют пользователям не пропускать важные изменения и быстрее реагировать на действия контрагентов.

- Отображение уведомлений по ключевым событиям: новые заявки, отклики на заявки, обновления заказов, новые сообщения в чатах, изменения по товарам и тд.;
- Разные типы уведомлений в зависимости от роли пользователя (покупатель / продавец);
- Визуальный индикатор новых уведомлений;
- Отображение списка уведомлений по каждой роли для одного аккаунта;
- Поддержка push-уведомлений через Firebase Messaging.
- Уведомления приходили в реальном времени — через WebSocket-соединение;
- Сообщения автоматически группируются по типу событий и отображаются в зависимости от активного профиля и роли;
- Реализована логика "прочитано / непрочитано" и очистки уведомлений.
Раздел «Чаты» обеспечивает коммуникацию между покупателями
и продавцами напрямую внутри платформы, что позволяет упростить согласование условий, задать уточняющие вопросы по заявкам или заказам
и ускорить процесс принятия решений.
- Чаты по каждой заявке, товару или заказу (привязка к конкретной сущности);
- Отображение истории переписки, в том числе по завершённым сделкам;
- Система уведомлений о новых сообщениях;
- Возможность быстрого перехода из карточки заявки/заказа в соответствующий чат.
- Реализация через WebSocket для обновления сообщений в реальном времени;
- Чаты интегрированы в общую систему аккаунтов и ролей — при переключении контекста загружаются соответствующие переписки;
- при разработке пришлось учитывать сложность идентификации участников: сообщения формируются с учётом активного аккаунта и его роли (продавец или покупатель);
- Реализация защиты от повторной отправки сообщений и обработки ошибок соединения.
Возникшие трудности
- Отсутствие документации
- Разрозненная кодовая база
- Сильная связанность компонентов
- Частые изменения бизнес-требований
- Неудобный и несогласованный API
- Неясность в логике аккаунтов и ролей

Отсутствие документации. И по frontend-, и по backend-части не было технических описаний, что усложняло вхождение в проект и замедляло работу на старте.
Разрозненная кодовая база. Код от предыдущих исполнителей был фрагментирован, плохо структурирован и содержал устаревшие решения. Потребовались масштабный рефакторинг и единый подход к архитектуре.
Сильная связанность компонентов. Из-за отсутствия модульности изменения в одном участке приложения затрагивали множество других, снижая надёжность и усложняя масштабирование.
Частые изменения бизнес-требований. Требования уточнялись или менялись уже после реализации без должной фиксации, что приводило к переработкам и осложняло планирование.
Неудобный и несогласованный API. Интерфейсы содержали дублирующиеся или конфликтующие эндпоинты, непоследовательную логику и не отражали реальную бизнес-модель.
Неясность в логике аккаунтов и ролей. Бизнес-логика ролей пользователей и их связей с профилями не была определена на старте и прояснялась по ходу реализации.
Результаты
Мобильное приложение было доведено до полнофункционального состояния, включая переработку пользовательского интерфейса, стабильную работу с данными, а также надёжную backend-инфраструктуру. Приложение было выпущено в продакшн, и им уже начали пользоваться реальные пользователи:
- за первые недели зарегистрировалось около 50 пользователей, из них до 30 аккаунтов продавцов;
- размещено более 20000 товарных позиций и создано 70 заявок на покупку.


