Article · · 6 min read
From a warehouse program to three sales channels: 85 SKU, 53 models
How a small shop's stock in UkrSklad became product cards on Horoshop, Rozetka and Facebook: reading a Firebird database safely, recovering variants from names, and AI descriptions approved in Telegram.
A fishing-tackle shop keeps its stock in UkrSklad, a desktop program with a Firebird database. It wanted the same products on its Horoshop site, on Rozetka and in the Facebook catalogue, each with a proper description. The data existed; it just was not in a shape any channel could use.
Never touch the live database
The first rule was safety. The pipeline reads a copy of the UkrSklad database, never the live file, and dumps it to JSON: 85 SKU. If anything goes wrong downstream, the shop's accounting is untouched.
Variants hide in the names
The warehouse stores every size and colour as a separate product. A store wants a parent model with variants. The only place the relationship exists is the product name, so a name parser groups SKUs into parent models and their variants. Out of 85 SKU it found 53 models with 81 variants linked to their parents.
AI writes, a person approves
Each parent model needs a description, and nobody has time to write 53 of them. Gemini 2.5 writes one per model, about 22 a day within the free quota; when the quota runs out, the queue simply continues the next day. Every text goes to a Telegram bot first, where the owner taps /approve, /reject or /regen. Nothing reaches a store without a person seeing it.
One source, three renderers
Approved data is upserted into SQLite, and photos are matched to product codes. Then separate renderers build XML for Horoshop, Rozetka and the Facebook catalogue. Adding a fourth channel means writing one more renderer, not touching the rest.
- 53 models found in 85 SKU
- 81 variants linked to their parents
- 3 channels from one source
- ~22 AI descriptions a day, each approved by a person
What I would do the same way again
Read a copy, keep one internal format, and put a human approval step in front of anything an AI writes for customers. The daily quota sets the pace, and that turned out to be fine: a small catalogue does not need to be rewritten in an hour.