Decor and tableware e-commerce store in Ukraine, 2026. Stage 1 delivered.
The store sells and rents out decor, tableware and furniture: about 1,500 products on Prom.ua and a WordPress site. New products arrive as supplier price lists in Excel. Every card was created by hand: find the product by its picture, come up with a name, translate it into Ukrainian, calculate the price, fill in the attributes. The assessment estimated at least 40 minutes per card.
The assessment found three more manual areas: Ukrainian on the website as required by law, rental tracking, and market research before purchasing. The work was split into stages, each delivered separately. The card pipeline came first as the most time-consuming.
The pipeline is written in Python with a Streamlit interface and starts with a double click on the client's computer. The three suppliers' price lists differ: photos embedded in the file, Alibaba links instead of photos, colour inside the description text. Each format got its own parser. Columns are matched through a synonym dictionary, so a typo in a price list header does not break parsing.
Every product gets an SKU with a category prefix, and the code is kept when the same product arrives again. Ten categories are mapped to Prom.ua attributes. The price is calculated from purchase cost, delivery, the NBU exchange rate and margin, with settings editable in the interface. Names, descriptions and search queries in Russian and Ukrainian are written by an LLM (Claude or the free Gemini Flash); when a price list has no product name, the product is identified from its photo. Before export, a check shows blocking errors and warnings. The output is a Prom.ua import file and a WooCommerce CSV. Upload to Prom.ua is done by a person, which makes the first iteration easier to check and roll back.
The pipeline went through 20 versions. Texts were checked by a separate audit by defect type: mixed languages, gender agreement errors, banned marketing phrases, foreign colours in keywords, repetitive descriptions. Each defect was fixed in the generation code; manual edits to finished texts were not allowed. The code is covered by 17 automated tests. The final version builds import files for 169 items with colour variants.
Stage 1 was delivered to the client. Time per card with the pipeline was not measured in the store's daily work.
A universal parser for any price list does not pay off: every new format needs its own parser. A template agreed with suppliers or data via API costs less, and that choice is made during solution design. An LLM description covers baseline quality; the text that sells is polished by a person. The check goes before export, while an error still costs nothing.