Tectyl Europe

Tectyl Europe sells industrial corrosion protection - coatings, cavity waxes, engine oils - across the continent. Their old site ran on an ageing custom-built PIM that only its original developers understood. We rebuilt the whole platform: a new website, a move to Akeneo PIM as the single source of truth for product data, and a custom document service connecting the two.
One source of truth, two pipelines
Product data lives in Akeneo: 264 attributes across 14 attribute groups, in 18 European locales. From there it flows out through two separate pipelines. A sync plugin we built pulls product content into the WordPress front end - specs, images, taxonomies - using queue-based batch processing so large syncs never time out, and delta sync so routine updates take seconds. A second pipeline handles documents, because regulatory files and marketing content should not share a failure mode.

Datasheets are generated, not uploaded
Nobody at Tectyl maintains PDF datasheets by hand. A Python service we built fetches the product from Akeneo, routes around 119 technical attributes into the right sections, applies per-locale translations, and renders a finished A4 Technical Data Sheet - automatic 2- or 3-page layout, brand typography, QR code linking back to the product. Generated sheets are cached and regenerated when the product changes in Akeneo. The public TDS library on the site is the output:

Safety documents treated like the regulated files they are
Safety Data Sheets are legally controlled documents, so the download flow is built for compliance: a request form, a country-scoped signed download token, an emailed link, and a log entry for every request attempt. Tokens survive full-page caching, and files are scoped so a visitor in one country cannot pull another country’s version.

The migration
Moving off the legacy PIM meant a real data migration, not an export-import. 52 products and 530 source data columns were mapped into Akeneo, 97% of them automatically. The first import pass surfaced a classic legacy problem - numeric IDs where Akeneo expected option codes - which was diagnosed, fixed, and re-run to 100% success. 19 legacy language codes were consolidated into 18 clean locales.
Stack: WordPress (Bedrock, Composer-managed), Akeneo PIM (Docker), Python with FastAPI, Playwright PDF rendering, DigitalOcean.