Кейс разработки
Десктоп-платформа сквозной аналитики и финансов для продавцов маркетплейсов Ozon, Wildberries и Яндекс.Маркета
О проекте
Dashiki — продукт группы 1SELLER, который собирает данные трёх маркетплейсов в единое зашифрованное хранилище и считает реальную прибыль продавца «до копейки». В боевой эксплуатации на аккаунте продавца: порядка 17 000 заказов и 79 000 строк финансовых отчётов. Готовится к выпуску как платный SaaS для селлеров.
1. Задача
Продавцу на маркетплейсах нужен инструмент, который закрывает весь цикл управленческого учёта — то, чего нет в личных кабинетах самих площадок:
- Единая картина по 3 маркетплейсам — Ozon, Wildberries и Яндекс.Маркет в одном окне, а не в трёх кабинетах.
- Реальная прибыль — на основе фактического движения денег, а не оценки по тарифам.
- Реклама по каждому товару — раскладка ДРР / CPC / CPA по SKU и дням.
- Юнит-экономика — с учётом комиссий, логистики, эквайринга, налогов и выкупа.
- Сохранность данных — локальный кэш над API площадок с жёсткими суточными лимитами.
Готовых решений под эту задачу нет: кабинеты площадок не сводят данные между маркетплейсами и не показывают честную прибыль, а сторонние сервисы «размазывают» цифры оценками и не совпадают с реальными деньгами. Требование заказчика — только точные цифры, ровно как в ЛК. Платформа разрабатывалась с нуля под этот принцип.
2. Архитектура решения
Dashiki построен как десктопное приложение по принципу data-warehouse-first: данные сначала загружаются в локальную зашифрованную базу и только потом визуализируются. При отрисовке интерфейс не обращается к внешним API — это даёт скорость, работу офлайн и защиту от лимитов площадок.
| Параметр | Значение |
|---|---|
| Платформа | Electron 33 + electron-vite — десктоп для Windows и macOS |
| Frontend | React 18 + TypeScript + Zustand + ECharts + Tailwind |
| Хранилище | SQLite через better-sqlite3-multiple-ciphers (SQLCipher, шифрование AES-256) |
| Интеграции | Ozon Seller API, Ozon Performance API, Wildberries (Statistics / Promotion / Content / Analytics), Яндекс.Маркет Partner API |
| Обработка | Собственный ETL-движок: реестр источников с приоритетами загрузки и авто-синком |
| Сборка / релиз | GitHub Actions по тегу — авто-сборка под Windows и macOS |
| Безопасность | Ключи API в Electron safeStorage (DPAPI на Windows), логирование winston |
2.1. Поток данных
- Подключение магазина — ключи API вводятся только в форме приложения и шифруются через safeStorage; в переписке/файлах не хранятся.
- ETL-загрузка — реестр источников тянет заказы, продажи, финансовые отчёты, рекламу и остатки; у каждого источника свой приоритет (частота синхронизации).
- Складирование — всё пишется в защищённые таблицы локальной БД; данные не удаляются.
- Визуализация — сервисы считают метрики из базы, интерфейс рисует дашборды: Дашборд, РНП, Юнит-экономика, Финансы, Реклама.
2.2. Сохранность данных и квоты площадок
Локальная база — это кэш над API площадок, у которых жёсткие лимиты (например, Ozon Performance — 1000 отчётов в сутки в скользящем окне 24 часа). Чтобы не упираться в лимит и не терять историю, введён квота-трекер, переживающий перезапуски приложения, а данные защищены политикой Data Protection: из защищённых таблиц ничего не удаляется. Потеря кэша означала бы простой бизнеса — площадки не отдают историю повторно.
3. Главная инженерная сложность
Сложность не в загрузке данных, а в том, чтобы посчитать прибыль ровно как в реальном денежном потоке и разложить рекламу по каждому товару — притом что площадки отдают эти данные по-разному и с ограничениями.
| Маркетплейс | Особенность данных | Решение |
|---|---|---|
| Ozon | Реклама per-SKU доступна только через асинхронные отчёты Performance API | Цикл submit → poll → download ZIP → parse CSV (3 формата) + квота-трекер |
| Все площадки | Прибыль по тарифам не сходится с реальными деньгами | Прибыль из фактического кэш-флоу по финансовым транзакциям — сходится с дашбордом 1:1 |
| Wildberries | Числа строками с запятой, «мёртвые» склады, удержания ≠ штрафы | Нормализация чисел + разнесение удержаний (промо / логистика / хранение / штрафы) |
| Яндекс.Маркет | Не заполнена себестоимость товара | Наследование себестоимости с Ozon/WB по общему артикулу (зачаток PIM) |
Результат автоматизации
Раньше свод по трём маркетплейсам и расчёт реальной прибыли делались вручную в Excel и не сходились с деньгами на счёте. Теперь это автоматический ETL и точные цифры «как в ЛК» — проверено на боевом аккаунте продавца (≈17 000 заказов, ≈79 000 строк финансовых отчётов).
4. Эффект для бизнеса
- Единая картина — три маркетплейса в одном окне вместо трёх кабинетов и Excel.
- Точность — прибыль на фактическом кэш-флоу совпадает с реальными деньгами.
- Реклама под контролем — ДРР / CPC / CPA по каждому SKU: видно, что окупается, а что нет.
- Защита данных — локальное зашифрованное хранилище, кэш над API, ничего не теряется.
- Масштабируемость — добавление магазина или маркетплейса не требует ручной настройки, только ключи доступа.
5. Технологический стек — кратко
| Параметр | Значение |
|---|---|
| Платформа | Electron 33 (Windows / macOS) |
| Frontend | React 18 + TypeScript + ECharts + Tailwind |
| Хранилище | SQLite + SQLCipher (AES-256) |
| Интеграции | Ozon Seller / Performance, Wildberries, Яндекс.Маркет |
| Обработка данных | Собственный ETL-движок (Node.js / TypeScript) |
| Сборка и релиз | GitHub Actions, релизы по тегу |
| Безопасность | Electron safeStorage (DPAPI), логирование winston |
Кейс подготовлен на основе технической архитектуры платформы Dashiki, разработанной группой 1SELLER. Содержание описывает инженерное решение и организацию обработки данных; коммерческие показатели и данные продавцов не публикуются.