O catálogo estava em 188 PDFs. Agora é um sistema.
O pedido era migrar um site em WordPress. O trabalho foi tirar o catálogo do arquivo, dar código a cada produto e entregar ao time da Sterilex a ferramenta para mantê-lo.
A Sterilex vende insumos para sala limpa, esterilização e bioprocesso. O catálogo dela existia em dois lugares, e nenhum dos dois era um sistema: o site publicava produtos sem código, e as fichas técnicas de verdade moravam em PDF. A migração do site era o pedido. O trabalho de fato foi o catálogo.
O site era um WordPress com WooCommerce e Elementor. Ele cumpriu o papel de vitrine. Tinha 398 produtos publicados, sem preço e sem nenhum código.
Desses, 111 não tinham foto principal. Dois em cada três títulos estavam em caixa alta, com a abreviação do sistema interno: o nome que o faturamento usa, e não o que o comprador procura. Em volta, reCAPTCHA no formulário, banner de cookies e o WhatsApp num botão flutuante.
O catálogo de verdade estava em outro lugar: 188 fichas técnicas em PDF, de cerca de 30 fabricantes, cada um com sua diagramação.
Sem código dos dois lados, o cruzamento só podia ser por nome. E nome erra:BOBINA SMS AZUL 50GRS e Bobina SMS Azul Sterilex 60g são quase o mesmo texto, e são produtos diferentes.
Em PDF, o catálogo era legível para uma pessoa e invisível para um sistema.
A página de produto em agosto de 2026: o banner de cookies aberto, o reCAPTCHA no formulário de cotação e o botão de WhatsApp por cima do conteúdo.
Escrevemos o extrator que lê as 188 fichas e devolve texto, foto candidata e registro estruturado. Depois, a conciliação entre o site e o catálogo, decidida item a item pelo time de produto da Sterilex.
A conciliação fechou em 12/09/2026 com as 398 URLs de produto do site antigo decididas: 212 migradas, 134 à espera de ficha e 52 com 301.
O site novo manteve as URLs do WordPress. Na virada, em 13/10/2026, os 191 endereços de produto sem página nova passaram a responder 301: 170 para um produto e 21 para uma categoria, nenhum 410. É outra conta, a do de-para final de 25/09, e os 52 de setembro estão dentro dela.
O painel é próprio, em endereço separado do site e atrás de login. E os quatro formulários (cotação na ficha, cesta de cotação, contato e pedido de catálogo) gravam o pedido no banco antes de mandar o e-mail.
O caminho que a ficha faz até virar página, e quem decide em cada passo.
1 Saber qual imagem é o produto
Extrair imagem de PDF é fácil. Saber qual delas é o produto não é: a ficha traz logo do fabricante, selo, ícone, moldura e tabela desenhada como imagem.
A eleição é por camadas. Descarta o que tem menos de 300 px de lado ou menos de 3 kB. Descarta canal alfa, que não é foto. E marca como logo a imagem que se repete idêntica em duas categorias diferentes, porque logo repete entre categorias e foto de produto não.
O acerto foi conferido a olho, imagem por imagem, em 48 amostras: cerca de 75% nas fichas de fabricante internacional e 60% nas da própria Sterilex. As fichas internacionais são sóbrias, com uma foto grande. As da Sterilex são peças de design, e a maior imagem costuma ser o banner da marca.
Por isso a saída não é um cadastro. É uma folha de conferência, onde todo erro aparece num relance.
A primeira extração rendeu 273 produtos: 167 de fichas e 106 de 7 catálogos multiproduto. 87 deles com código, onde o site antigo não tinha nenhum.
2 Onde a leitura contextual entra, e onde não entra
Dos 188 arquivos, 167 são uma ficha para um produto, e saem por regra.
Sete são catálogos com vários produtos, descritos em prosa e tabela espalhadas por páginas, com o desenho mudando a cada fabricante. Ali a regra quebra, e é onde entra a leitura contextual, conferida depois por gente.
Os outros 14 não recebem nenhuma das duas. São decisão de negócio, e ficam com a Sterilex: só ela sabe dizer se a especificação de um fornecedor é o mesmo produto de uma ficha que já existe.
Nem todo arquivo é problema de extração. Alguns são pergunta para o dono do catálogo.
3 A conciliação, em três filas
A tela de conciliação dividia o trabalho em três filas, e cada uma era uma pergunta de negócio.
Equivalências: a comparação automática achou um candidato no catálogo para esta página do site. Nome parecido não é o mesmo produto, então alguém confirma ou recusa. Sem ficha: a página existe no site e não tem nada parecido no catálogo. Ela está indexada, então precisa de destino. Lançamento: a ficha existe e ainda não tem página. Entra no lançamento ou fica de fora?
A fila Sem ficha em agosto de 2026: a página do site antigo à esquerda, os parecidos do catálogo à direita e a pergunta no alto.
As 398 URLs de produto do site antigo fecharam em 12/09/2026: 212 migradas, 134 à espera de ficha e 52 com 301. Os 191 endereços com 301 da virada são outro universo, o de-para final, e os 52 estão dentro dele.
A tela cumpriu o papel e saiu: foi apagada quando a última decisão foi tomada.
4 O painel que mantém isso verdadeiro
A conciliação decidiu uma vez. O painel é o que mantém o catálogo certo depois dela, em quatro telas: Produtos, Ficha, Publicação e Histórico.
Produtos: o catálogo inteiro, com busca por nome ou código. O painel nesta captura roda com dado de demonstração.
Na Ficha mora o que o site antigo não tinha: nome comercial, nome descritivo, código e categoria, cada um no seu campo.
A Ficha de um produto, com nome comercial, nome descritivo, código e categoria separados. Captura com dado de demonstração.
A Publicação mostra o que mudou e ainda não está no site, e o que está no ar agora. Retirar um produto de linha não apaga o endereço dele: a publicação recusa endereço do site antigo sem destino, então nenhum produto vira 404 em silêncio.
A Publicação, com o que está no ar e as publicações anteriores. Captura com dado de demonstração.
No Histórico, cada alteração tem autor, data e ação, gravados no servidor na mesma operação da escrita. Saber quem mudou o quê não depende de alguém lembrar de anotar.
O Histórico, agrupado por dia. Pessoas e endereços desta captura são dado de demonstração.
O antes é a página de produto do site antigo, medida em agosto de 2026. O depois é a página de produto do site novo, medida em 23/10/2026 no Lighthouse, perfil móvel, mediana de quatro rodadas.
O site não estava lento. Ele estava carregando os outros.
O código de terceiro de hoje inclui o Turnstile do formulário e a tag do Google.
O site roda na conta Cloudflare da própria Sterilex, em Workers, com o catálogo no D1 e as fotos no R2. React só no painel. Python só na extração das fichas.