anêmona
PTEN
case study 02_

The catalog was in 188 PDFs. Now it is a system.

The request was to migrate a WordPress site. The work was taking the catalog out of the files, giving each product a code and handing the Sterilex team the tool to maintain it.

Client
Sterilex Científica
Period
July to October 2026
Scope
site, admin panel and catalog

sterilex.com.br (in Portuguese)

188
PDF spec sheets read
87
products with a code where there was none
398
product URLs decided one by one

Sterilex sells supplies for cleanrooms, sterilization and bioprocessing. Its catalog existed in two places, and neither was a system: the site published products with no code, and the real spec sheets lived in PDF. Migrating the site was the request. The actual work was the catalog.

The home page of the new Sterilex site, live since October 13, 2026 (in Portuguese)
back to top01The problem

Two inventories that did not talk to each other

The site was WordPress with WooCommerce and Elementor. It did its job as a storefront. It had 398 published products, with no price and no code at all.

Of those, 111 had no main photo. Two in every three titles were in all caps, with the abbreviation from the internal system: the name billing uses, not the one a buyer searches for. Around that, reCAPTCHA on the form, a cookie banner and WhatsApp in a floating button.

The real catalog was somewhere else: 188 technical spec sheets in PDF, from about 30 manufacturers, each with its own layout.

With no code on either side, matching could only be done by name. And names mislead: BOBINA SMS AZUL 50GRSand Bobina SMS Azul Sterilex 60g are almost the same text, and they are different products.

In PDF, the catalog was readable to a person and invisible to a system.

The product page of the old site, in August 2026
The product page in August 2026: the cookie banner open, reCAPTCHA on the quote form and the WhatsApp button over the content.
back to top02The sequence

The catalog before the site

The new site could only be designed once it was known what it would publish.

  1. Julythe contractmigrate the site
  2. Augustspec sheet extraction and reconciliation188 PDFs
  3. Septemberthe move to Cloudflare and the new design191 URLs with a 301
  4. October 13livesterilex.com.br
back to top03What we did

An extractor, a reconciliation, a site and an admin panel

We wrote the extractor that reads the 188 spec sheets and returns text, a candidate photo and a structured record. Then the reconciliation between the site and the catalog, decided item by item by the Sterilex product team.

The reconciliation closed on September 12, 2026 with the 398 product URLs of the old site decided: 212 migrated, 134 waiting for a spec sheet and 52 with a 301.

The new site kept the WordPress URLs. At the cutover, on October 13, 2026, the 191 product URLs with no new page started answering 301: 170 to a product and 21 to a category, none with a 410. That is a different count, the final redirect map of September 25, and the 52 from September are inside it.

The admin panel is custom, on its own address separate from the site and behind a login. And the four forms (quote on the spec sheet, quote basket, contact and catalog request) save the request to the database before sending the email.

back to top04The mechanisms

Four mechanisms

The path a spec sheet takes until it becomes a page, and who decides at each step.

1 Knowing which image is the product

Extracting images from a PDF is easy. Knowing which one is the product is not: the sheet carries the manufacturer's logo, seals, icons, frames and tables drawn as images.

The selection works in layers. It discards anything under 300 px on a side or under 3 kB. It discards alpha channels, which are not photos. And it flags as a logo any image that repeats identically in two different categories, because logos repeat across categories and product photos do not.

Accuracy was checked by eye, image by image, on 48 samples: about 75% on international manufacturers' sheets and 60% on Sterilex's own. The international sheets are sober, with one large photo. The Sterilex sheets are design pieces, and the largest image is usually the brand banner.

That is why the output is not a product record. It is a review sheet, where every error shows at a glance.

The first extraction yielded 273 products: 167 from spec sheets and 106 from 7 multi-product catalogs. 87 of them with a code, where the old site had none.

2 Where contextual reading comes in, and where it does not

Of the 188 files, 167 are one sheet for one product, and they go through by rule.

Seven are catalogs with several products, described in prose and tables spread across pages, with the layout changing from one manufacturer to the next. There the rule breaks, and that is where contextual reading comes in, checked afterwards by people.

The other 14 get neither. They are business decisions, and they stay with Sterilex: only Sterilex can say whether a supplier's specification is the same product as a sheet that already exists.

Not every file is an extraction problem. Some are questions for the owner of the catalog.

3 Reconciliation, in three queues

The reconciliation screen split the work into three queues, and each one was a business question.

Equivalents: the automatic comparison found a candidate in the catalog for this page of the site. A similar name is not the same product, so someone confirms or rejects it. No spec sheet: the page exists on the site and has nothing similar in the catalog. It is indexed, so it needs a destination. Launch:the spec sheet exists and does not have a page yet. Does it go into the launch or stay out?

The No spec sheet queue of the reconciliation screen, in August 2026
The No spec sheet queue in August 2026: the old site's page on the left, the similar catalog items on the right and the question at the top.

The 398 product URLs of the old site closed on September 12, 2026: 212 migrated, 134 waiting for a spec sheet and 52 with a 301. The 191 URLs with a 301 at the cutover are a different universe, the final redirect map, and the 52 are inside it.

The screen did its job and left: it was deleted when the last decision was made.

4 The admin panel that keeps it true

Reconciliation decided once. The admin panel is what keeps the catalog right after it, in four screens: Products, Spec sheet, Publishing and History.

Products: the whole catalog, with search by name or code. The admin panel in this screenshot runs with demo data.

The Spec sheet holds what the old site did not have: trade name, descriptive name, code and category, each in its own field.

The Spec sheet of a product, with trade name, descriptive name, code and category kept separate. Screenshot with demo data.

Publishing shows what has changed and is not on the site yet, and what is live now. Discontinuing a product does not delete its address: publishing refuses an address from the old site with no destination, so no product turns into a 404 in silence.

Publishing, with what is live and the previous releases. Screenshot with demo data.

In History, every change has an author, date and action, recorded on the server in the same operation as the write. Knowing who changed what does not depend on someone remembering to write it down.

History, grouped by day. People and addresses in this screenshot are demo data.
back to top05Performance

The product page, before and after

product pageAugust 2026October 23, 2026difference
page weight5.37 MB1.24 MB4.3x lighter
requests18535from 185 to 35
third-party code3.64 MB1.04 MB3.5x less

The before is the product page of the old site, measured in August 2026. The after is the product page of the new site, measured on October 23, 2026 in Lighthouse, mobile profile, median of four runs.

The site was not slow. It was carrying everyone else.

Today's third-party code includes the Turnstile on the form and the Google tag.

back to top06Technology

What runs underneath

application
  • Astro
  • React
  • TypeScript
cloud
  • Cloudflare
  • Workers
  • D1
  • R2
extraction
  • Python
protection
  • Turnstile
delivery
  • Terraform

The site runs on the Cloudflare account of Sterilex itself, on Workers, with the catalog in D1 and the photos in R2. React only in the admin panel. Python only in the spec sheet extraction.

back to top07The result

The catalog left the files

The catalog now has codes, categories and checked photos. The product team got the tool to keep it true.

The site is a consequence.