Case · Laravel · Marketplaces · 2026

Book conveyor

A system that transforms a stack of books and a few photos c live cards on Ozon, Wildberries and Yandex Market – with recognition, market price assessment, publication and end-to-end accounting of balances.

55 500PHP
3marketplace
60service
30background
45CLI-command
302test

The challenge

Bookkeeping breaks the usual logic of e-commerce: goods have no batch and no re-delivery. One book is one unit, with its own fortune, its own price and its own set of photographs. Put it manually on three sites is to reprint the output data, find analogues, estimate the price, select the category and attributes, and after the sale do not forget to zero the rest on the other two marketplaces.

The project removes the whole routine. The operator takes a picture of the book – the system does everything else by itself and shows the person only what needs to be solved.

The key limitation of architecture is that the product is physically one. Sale on one site must instantly pay off the balance on the other two - otherwise the store sells a book that no longer exists.

Seven stages of the conveyor

  1. Reception and filming

    The party starts with one screen of mass creation: the article is assigned automatically, the photos are loaded with a pack. The role of the “photographer” is deliberately trimmed down to this single screen – the person on reception can’t break anything in the catalog.

    Blade + Alpine · loading and rotating images · Intervention Image
  2. Photo recognition

    Vision-model reads the cover and output: title, author, publisher, ISBN, year, series, cover type, age rating. A separate passage checks the names typed caps - the model returns the correct register, but only if the text coincides with the original without taking into account the register and punctuation.

    Dimensions and weight are substituted according to size patterns: the model determines the class of the book, the template gives millimeters and grams suitable for a market place card.

    OpenAI Vision · drivers openai / mock · queue with heartbeat and auto restart
  3. Search for analogues on sites

    Two separate Node services on Playwright search for Wildberries and Ozon with a real browser – with session cookies, proxy and health checks. Yandex Market is polled by API. The found cards are compared with the book by title, author and ISBN with a numerical assessment of similarity.

    Express + Playwright in individual containers · Shadowsocks proxy · timeouts and foulbacks
  4. Valuation of price

    The price is considered according to the rules of the commodity expert, transferred to the code: only analogues with the same cover are taken into account, electronic publications are discarded, obvious emissions are cut off along the corridor of relations to the median, the minimum price tag is valid. The final sale price is displayed from the price tag at a discount, the author's autograph gives a markup.

    If the range of prices by analogues is too large, the AI arbitrator is connected: he selects the reference group and explains the decision with the text that the operator sees.

    Median and Average · Emission filter · Manual price protected from overwriting
  5. Card and publication

    Description and hashtags are generated, the Ozon category is selected along with its mandatory attributes, payload is collected under the format of each site. Publishing is a background task with repeats, dry-run mode and human decoding of site errors instead of raw response code.

    A separate layer monitors duplicates: the same book will not go away with a second card, and the already sold Ozon card can be reused instead of creating a new one.

    Journal of publications with diagnosis · protection against duplicates · cross-publishing between sites
  6. Orders

    Orders come in two ways - webhook sites and regular survey of offices. For each, a timeline of events is built, returns and confirmation of the return of goods to the warehouse are tracked.

    Webhooks Ozon / WB / YAM · Polling FBS · timeline and returns
  7. Remains

    Unified warehouse accounting: the sale at any site is carried out by movement around the warehouse and immediately extinguishes the balance on the rest. An hourly snapshot of the outsynchron is collected — where the local residue has diverged from the marketplace — and it can be cured by mass synchronization from the interface.

    Warehouse movements with audit · unloading versions · protection against double write-off

Three venues, three different API

Each marketplace is connected by several cabinets, each has its own card format, its own warehouse model and its own moderation rules. The overall domain model is one, the differences are isolated in the site services.

Ozon

  • Synchronization of the tree of categories and attributes, selection of the book category
  • Content rating cards and its regular update
  • Warehouses, residues, import of goods and catalog reconciliation
  • Reusing sold cards and fixing false "sold" status
  • Own search microservice via proxy

Wildberries

  • Cards, prices and reports on the Cabinet n
  • Remains with “warming up” of new cards and repair of hanging
  • Control of the length of the name under the limits of the site
  • Search for browser analogues with cookies and optional proxy
  • Full log of API requests for incident analysis

Yandex Market

  • Offices with access check and selection of book category
  • Publication of cards and finalization of status
  • Import of goods, hourly synchronization of balances
  • Survey of orders and participation in general warehouse accounting

What keeps the system on its feet

Most of the code is not written for the sake of a happy script, but for the sake of what happens after it: the site responded with a mistake, the task fell, the rest went apart, the dimensions did not pass moderation.

  • Rassynchron detector - hourly snapshot of discrepancies between local residues and site data, with mass repair and publication of missing cards.
  • Audit of dimensions Finds cards with incorrect HGH, builds a correction plan and applies it to the background task.
  • Catalog parity - reconciliation of what was published on three platforms: deduplication of goods, search for "missing" cards, cross-publishing of missing ones.
  • Health Pipeline Panel Shows books stuck between stages, allows you to restart recognition without going to the console.
  • Backup Dump base on FTP every two hours during working hours, photos - once a day incrementally.
  • Tests and defense of the battle base 302 tests on the domain logic of publishing, residues and orders; a separate guard does not allow running tests to go to the production base.

Architecture

Backend
PHP 8.3 Strict domain model on 32 entities
Laravel 13 Eloquent, queues, scheduler, Sanctum
MySQL 72 migration, indexes for catalog samples
PhpSpreadsheet Import of balances from the supplier’s tables
Frontend
Blade 78 admin interface templates
Alpine.js Point interactivity without SPA
Tailwind 4 Assembly through Vite
role Admin, manager, moderator, photographer
Infrastructure
Docker nginx, php-fpm, MySQL, workshops under supervisor
Node · Playwright Two search microservices in containers
Certbot TLS with auto-extension
proxy Shadowsocks container for site search
Integration
Ozon Seller API - catalog, cards, warehouses, orders
Wildberries API - cards, prices, balances, reports
Yandex Market API - cards, balances, orders
OpenAI Recognition, descriptions, price arbitrage

The result

A production system in which the operator deals only with what cannot be automated: evaluates the state of the book and confirms controversial decisions. Everything else – recognition, search for analogues, pricing, publication on three sites, taking orders and mixing balances – is on schedule and does not require daily intervention.

32model
31controller
72migration
78screen
14 100test
20+planner

A brief description of this work in the portfolio

Laravel 13 · PHP 8.3 · MySQL · Docker · Playwright · OpenAI · Ozon · Wildberries · Yandex Market


Let’s discuss your project

Tell me what you would like to build. I will reply by email.

Or message me on Telegram @ifwcom