work/build/printing-house
// case 07 · build · woocommerce + keycrm · 3,110 products

A print shop’s catalogue — 40,097 variations replaced by one configurator.

A printing house selling print runs and branded merch was moving to a new store on a ready-made WooCommerce theme. Half of what it sells comes from a clothing supplier’s feed and goes out with a logo applied; the other half — leaflets, brochures, packaging — lives in KeyCRM. As WooCommerce variations, the two came to 40,097.

client
printing house, UA
platform
WooCommerce, ready theme
catalogue
3,110 products
service
07 · build
status
on staging, move pending
year
2026
variations on products
040,097
brochure page, HTML
356 KB2.61 MB
products that take branding
2,88720 methods · 137 run tiers

the brief

A new store on a ready-made theme, prepared for this shop: menus and filters, a cart that understands print runs, quotes with payment with VAT or to a sole proprietor, Nova Poshta, a layout file attached to the order, and KeyCRM both ways — products and prices in, orders out.

the hard part: two kinds of product

Clothing and promo goods come from a supplier’s feed in sizes and colours, and are sold with branding — embroidery, heat transfer, UV print and more: 20 methods, each priced by run size in 137 tiers, mapped onto the store’s categories from the client’s own table (umbrellas, for one, take none). Print products come from KeyCRM with axes of their own — run, paper, finish.

In WooCommerce both had turned into variations, 40,097 of them. A stapled brochure alone carried 380, and its page weighed 2.6 MB of HTML. Sorting a category by price put 873 zero-priced products first, and was slow. The CRM sync overwrote discounts and marked print products out of stock — they have no stock to count.

what was built

  1. A catalogue plugin with its own tables — products, variants, axes, branding methods and tiers, category settings, sync runs, a change log. One product, one price, no variations.
  2. Two sources, the supplier feed and KeyCRM, normalised into the same axes — CRM data holds the same property under two spellings, and the size grid would otherwise double.
  3. A configurator on the product page: colour, size grid, branding method, run. Size quantities have to add up to the run, and the price is recalculated on the server, in the cart as well.
  4. Orders carry the whole configuration into KeyCRM.
  5. Migration in waves, with a dry-run parity report and resumable after a kill; then the whole release database built offline, because the hosting has no terminal — code as a zip, data as a ready dump for phpMyAdmin. Checked before release: no differences in titles, texts, photos or categories across 3,074 products.

what it did not need

No new theme, no paid configurator plugin, no change in how the client works in KeyCRM.

where it stands

The store runs on a staging domain until it replaces the client’s current site; the old site’s addresses will need redirects at the move, as a separate task. The nightly sync needs a cron job the hosting does not provide yet — until then it runs from a button in the admin.