Case study · B2B e-commerce & AI

SIBA Store: one catalog, every channel

SIBA is a B2B supplier in North Cyprus and Turkey (HVAC, pumps, water treatment, pool and cleaning equipment). I rebuilt sibastore.com as the single source of truth: the website, the checkout, the WhatsApp bot, the voice assistant and the phone assistant all read the same live product data.

20,407active products
56brands
17main categories
64product catalogs online
3.4 shomepage cold load, down from 17 s

Figures measured on 26 October 2026. Sole developer: design, backend, data pipeline, infrastructure and AI.

The problem

Product knowledge was spread across hundreds of supplier PDF catalogs, an inventory spreadsheet and people's heads. Prices came in four currencies (TL, USD, EUR, GBP). Customers asked the same questions by phone and WhatsApp all day, and every channel gave a slightly different answer.

What I built

1. A storefront that feels like a brand site

A new design modeled on large manufacturer sites: a clean header with live exchange rates, a category slider, product cards with one-tap WhatsApp, compare and add-to-cart buttons, and product pages with fixed tabs for description, specifications, the catalog page the product came from, and its user manual.

2. Multi-currency checkout that doesn't lose money on exchange rates

Mixed-currency carts are never summed into one meaningless number. VAT is calculated in the product's own currency first, and only the final amount is converted to TL with the live selling rate, so rounding and rate drift cannot eat the margin.

Unit price (USD/EUR/GBP/TL)→+ VAT in that currency→Per-currency totals→TL equivalent at live rate

3. From supplier PDFs to clean product pages

Most product data lives in supplier catalogs. I built a Python pipeline that reads each catalog page by page: raw text first, OCR and a local vision model only where text is missing, then structured extraction of names, variants and specifications. Every value keeps a record of which PDF and page it came from.

Supplier PDF→Page map + raw text→Extraction→Checks against the page→Master data→Website

4. Assistants that answer from the live site

One rule set for every assistant: the source is sibastore.com. If a product has a price, the assistant quotes it with VAT and the TL equivalent; if not, it routes the customer to the right sales contact. Instead of sending PDFs it sends the product page link, and only shares the catalog page when the customer insists. The WhatsApp bot runs on this rule today; the website voice chat and the phone assistant are moving to it next.

Engineering notes

On a CPU-only server, the slow part of a local LLM is reading the long system prompt, not writing the answer. Keeping the fixed instructions first and the changing product context last lets the prompt cache work: a follow-up question drops from about 37 s to 2–4 s on the same 3B model.

What's next

LaravelPHPMySQLPythonFastAPIDockerNginxPyMuPDFTesseract OCROllamallama.cppReal-ESRGANAsteriskWhatsApp API3-D Secure

Get in touch →