Кейс · Laravel · маркетплейсы · 2026
Система, которая превращает стопку букинистических книг и несколько фотографий в живые карточки на Ozon, Wildberries и Яндекс Маркете — с распознаванием, оценкой цены по рынку, публикацией и сквозным учётом остатков.
Букинистика ломает обычную логику электронной торговли: у товара нет партии и нет повторной поставки. Одна книга — одна единица, со своим состоянием, своей ценой и своим набором фотографий. Завести её вручную на три площадки — это перепечатать выходные данные, найти аналоги, прикинуть цену, подобрать категорию и атрибуты, а после продажи не забыть обнулить остаток на двух других маркетплейсах.
Проект убирает эту рутину целиком. Оператор фотографирует книгу — всё остальное система делает сама и показывает человеку только то, что требует решения.
Ключевое ограничение архитектуры: товар физически один. Продажа на одной площадке обязана мгновенно погасить остаток на двух других — иначе магазин продаёт книгу, которой уже нет.
Партия заводится одним экраном массового создания: артикул присваивается автоматически, фотографии грузятся пачкой. Роль «фотограф» намеренно урезана до этого единственного экрана — человек на приёмке не может ничего сломать в каталоге.
Blade + Alpine · загрузка и поворот изображений · Intervention ImageVision-модель читает обложку и выходные данные: название, автор, издательство, ISBN, год, серия, тип обложки, возрастной рейтинг. Отдельным проходом проверяются названия, набранные капсом, — модель возвращает корректный регистр, но только если текст совпадает с исходным без учёта регистра и пунктуации.
Габариты и вес подставляются по шаблонам размеров: модель определяет класс книги, шаблон даёт миллиметры и граммы, пригодные для карточки маркетплейса.
OpenAI Vision · драйверы openai / mock · очередь с heartbeat и авто-рестартомДва отдельных Node-сервиса на Playwright ходят в поиск Wildberries и Ozon настоящим браузером — с сессионными куками, прокси и health-проверками. Яндекс Маркет опрашивается по API. Найденные карточки сопоставляются с книгой по названию, автору и ISBN с числовой оценкой похожести.
Express + Playwright в отдельных контейнерах · Shadowsocks-прокси · таймауты и фолбэкиЦена считается по правилам товароведа, перенесённым в код: учитываются только аналоги с такой же обложкой, электронные издания отбрасываются, явные выбросы отсекаются по коридору отношений к медиане, действует минимальный ценник. Итоговая цена продажи выводится из ценника со скидкой, автограф автора даёт наценку.
Если разброс цен по аналогам слишком велик, подключается AI-арбитр: он выбирает опорную группу и объясняет решение текстом, который видит оператор.
Медиана и среднее · фильтр выбросов · ручная цена защищена от перезаписиГенерируются описание и хэштеги, подбирается категория Ozon вместе с её обязательными атрибутами, собирается payload под формат каждой площадки. Публикация идёт фоновой задачей с повторами, режимом dry-run и человеческой расшифровкой ошибок площадки вместо сырого кода ответа.
Отдельный слой следит за дублями: одна и та же книга не уедет второй карточкой, а уже проданная карточка Ozon может быть переиспользована вместо создания новой.
Журнал публикаций с диагностикой · защита от дублей · кросс-публикация между площадкамиЗаказы приходят двумя путями — вебхуками площадок и регулярным опросом кабинетов. По каждому строится таймлайн событий, отслеживаются возвраты и подтверждение возврата товара на склад.
Вебхуки Ozon / WB / ЯМ · поллинг FBS · таймлайн и возвратыЕдиный складской учёт: продажа на любой площадке проводится движением по складу и сразу гасит остаток на остальных. Ежечасно собирается снимок рассинхрона — где локальный остаток разошёлся с маркетплейсом, — и его можно вылечить массовой синхронизацией из интерфейса.
Движения склада с аудитом · версии выгрузок · защита от двойного списанияКаждый маркетплейс подключается несколькими кабинетами, у каждого свой формат карточки, своя модель складов и свои правила модерации. Общая доменная модель одна, различия изолированы в сервисах площадок.
Большая часть кода написана не ради счастливого сценария, а ради того, что происходит после него: площадка ответила ошибкой, задача упала, остаток разошёлся, габариты не прошли модерацию.
Продакшен-система, в которой оператор занимается только тем, что нельзя автоматизировать: оценивает состояние книги и подтверждает спорные решения. Всё остальное — распознавание, поиск аналогов, ценообразование, публикация на три площадки, приём заказов и сведение остатков — идёт фоном по расписанию и не требует ежедневного вмешательства.
Laravel 13 · PHP 8.3 · MySQL · Docker · Playwright · OpenAI · Ozon · Wildberries · Яндекс Маркет