The problem
The company sells several brands through one Shopify store, in four languages, and keeps adding brands. Every listing was written by hand and then written again in German, Dutch and French, each with its own SEO title and meta description. It took about four hours a day, and adding a brand meant adding that whole job again, so the work grew faster than the catalogue did.
What we built
Two n8n workflows around a Cloudflare Worker. The first catches the Shopify product webhook, normalises it and hands it to the Worker, which owns the pipeline: ingest, generate, translate, image. Every step has its own error branch, so a failed image is recorded as a failed image instead of losing the draft. Claude writes the copy and the translations, Flux on Workers AI makes the hero image, Supabase holds the state. The second workflow fires when a reviewer approves and writes the listing and all three translations back to Shopify. Every draft also carries a fact check: the model's own output is compared statement by statement against the product's source text, and anything the source does not support is flagged with the field it came from and the reason. The lifecycle sits in Postgres and is enforced by a trigger, and row level security keeps each brand's queue to the people who work on it, which is what makes the next brand cheap to add.
The result
The four hours a day are gone. A measured run goes from Shopify webhook to a listing ready for review in 30.7 seconds, with three translations and a hero image. Every step records the model it used and how long it took. Nothing reaches the store without a person, and because the fact check has already marked the claims the source will not support, that person is reading a short list rather than re-reading the whole listing.




