# Мобильное приложение для действующего магазина на Shopify

- Отрасль: Интернет-торговля
- Рынок: B2C
- Статус: В разработке
- Стек: Flutter, Flask, PostgreSQL, Redis, Meilisearch, React
- Страна: Грузия
- Сайт: https://isurve.ge/

Bitmason: https://bitmason.dev/ru/cases/isurve/

## О клиенте

isurve.ge, интернет-магазин в Грузии, работает на Shopify. Приложение станет новым каналом продаж рядом с сайтом; товары, цены, остатки и заказы остаются в Shopify.

## Задача

Дать действующему магазину на Shopify приложения для iOS и Android на трёх языках, не заменяя сам магазин: один каталог, один учёт остатков, один список заказов.

## Решение

- Одно приложение на Flutter для iOS и Android на английском, грузинском и русском
- Бэкенд на Flask, который держит приложение в согласии с Shopify
- Поиск на трёх языках на Meilisearch
- Рекомендации по правилам с весами, которые настраивают сотрудники
- Оплата картой, наличными при доставке или баллами
- Push-кампании и рекламные страницы
- Админ-панель с ролями, вторым фактором входа и журналом аудита
- Автоматические проверки каждого изменения: типы, тесты, контракт API, безопасность

### Источником остаётся Shopify

Товары, цены, остатки, переводы и заказы остаются в магазине клиента на Shopify, сайт не затрагивается. Наш бэкенд импортирует каталог целиком, а затем следует за вебхуками Shopify и отдельным проходом восстанавливает пропущенные события. Заказы из приложения записываются обратно в Shopify, поэтому сотрудники магазина работают там же, где и раньше.

### Одно приложение для iOS и Android

Единая кодовая база на Flutter, устроенная по функциям, на английском, грузинском и русском. То, что покупатель уже открывал (товары, категории, характеристики), хранится на устройстве и открывается без связи; для покупки связь нужна.

### Что получает покупатель

Главный экран с баннерами, хитами продаж, новинками и двумя предложениями дня; дерево категорий с фильтрами и сортировкой; карточки товаров с галереей с увеличением, характеристиками, аксессуарами и товарами, которые часто покупают вместе. Сравнение до четырёх товаров, история цен, сканер штрихкодов, готовые наборы, избранное, отзывы подтверждённых покупателей, история заказов с повтором в одно касание и тёмная тема.

### Поиск на трёх языках

Поиск работает на Meilisearch и принимает запросы на грузинском, русском и английском. Прежде чем выбрать его, мы проверили, как он делит грузинский текст на слова, по порогам, записанным заранее; проверка пройдена, а решение зафиксировано вместе с доказательствами. Сортировка и фильтры, которые выбрал покупатель, всегда важнее персонализации.

### Рекомендации, которые может прочитать человек

Первая версия рекомендует по правилам, а не обученной моделью: сходство по категории, характеристикам и цене, что продаётся в категории, что покупают вместе и что покупатель только что смотрел. Веса и приоритетные теги сотрудники задают в админ-панели, а новое действие меняет следующую подборку.

### Оплата и баллы

Оплата картой идёт через платёжную страницу Keepz, оплата наличными при доставке сохраняется. Покупатели получают баллы за покупки и могут целиком оплатить ими товары в заказе. Заказ оплачивается одним способом, без смешивания, а каждое движение баллов записывается в журнал, поэтому при возврате баллы списываются обратно.

### Админ-панель для сотрудников магазина

Админ-панель на React позволяет менять приложение без выпуска новой версии: дерево категорий, цены доставки, кампании, правила начисления баллов, флаги принудительного обновления и режима обслуживания. В ней работают четыре роли, и что разрешено каждой, решает сервер. Для входа нужен второй фактор, а каждое изменение попадает в журнал аудита, в который можно только добавлять.

### Push-кампании и реклама

Сотрудники отправляют push-кампании сегментам, заданным правилами, с учётом согласия, тихих часов и ограничений частоты, и видят показатели доставки. Покупатель, пришедший по рекламе, первым видит рекламируемый товар; открывший приложение напрямую видит хиты недели.

### Как ведётся работа

Требования, модель данных, контракт API и более сорока архитектурных решений записаны в репозитории, а открытые вопросы к клиенту пронумерованы и отслеживаются до ответа. Каждое изменение проходит CI: форматирование, статическая типизация, тесты, контракт API, поиск секретов и проверка зависимостей на уязвимости.

## На каком этапе

В разработке. Приложение, бэкенд и админ-панель создаются в одном репозитории по письменно зафиксированному объёму, каждое изменение проверяет CI. Скриншоты приложения и результаты появятся после запуска.

## Услуги по теме

- [Веб- и мобильная разработка](https://bitmason.dev/ru/services/web-and-mobile.md): Один продукт в вебе, на iOS и Android с общим дизайном и бэкендом.
- [Заказные приложения](https://bitmason.dev/ru/services/custom-applications.md): ПО, построенное вокруг того, как работает ваш бизнес, и связанное с вашими системами.
