Atelier
Voss.
A luxury home furnishings brand had 2,000 SKUs and no product descriptions. Their copywriter was spending 45 minutes per product. We built a factory: image in, publish-ready copy out — 2,000 products processed in 48 hours.
- Client
- Atelier Voss
- Year
- 2025
- Type
- AI Automation
- Stack
- n8n · GPT-4o Vision · Claude 3.5 · Perplexity · Shopify
- Timeline
- 4 weeks
2,000 Products.
Zero Descriptions.
Atelier Voss sells premium home furnishings — handwoven rugs, ceramic lighting, upholstered furniture, and hand-finished accessories. Their Shopify catalog had over 2,000 SKUs. Most product pages had a title, a price, and a photograph. No description, no SEO metadata, no materials copy.
Their in-house copywriter was producing twenty to thirty descriptions a week — quality work, but at 45 minutes per product, the catalog would take two years to fill. New collections kept arriving. The backlog was growing faster than it could be cleared.
45 min per product
Manual research, attribute extraction from images, drafting, and SEO optimisation — all before a single word was written.
2,000+ blank SKUs
Two years of backlog at current pace, while new collections added 80–120 products per quarter.
No attribute database
Product attributes lived in supplier PDFs and the copywriter's notes — no structured data to feed a template or a model.
Copywriter tied to descriptions
60% of their time was spent on descriptions. Campaign creative, lookbook copy, and email sequences were consistently deprioritised.
The bottleneck wasn't writing — it was attribute extraction. The copywriter spent most of their time looking at product images, supplier sheets, and competitor listings to build a mental model of what the product was before writing a word. That part is exactly what a vision model does in seconds.
Four Principles
That Shaped the Build.
Two models, two jobs
GPT-4o Vision is better at image analysis. Claude 3.5 Sonnet is better at brand-consistent persuasive copy. Using one model for both produced worse output than splitting the task. Each model does what it's best at.
→ Tested against using GPT-4o for both steps. Claude's copy consistently scored higher on brand-voice consistency in blind review by the editorial team.Verify before writing
A model inferring that a rug is "hand-knotted in Nepal" from a product image is a guess. Perplexity cross-references the product and brand against live sources before copy is written — grounding the output in facts rather than confident approximations.
→ Caught 34 incorrect material claims in the first batch run. All were corrected before reaching the editorial review step.Human review on exceptions, not on everything
Requiring editorial sign-off on every generated description would defeat the purpose. The workflow flags only low-confidence outputs and products with missing attributes — roughly 5% of the total. Everything else publishes automatically once approved in the sheet.
→ The editorial team went from reviewing 100% of copy to reviewing under 5%. The saved time went to campaign creative.Structured output enforcement
Unstructured generation produces inconsistent fields — sometimes a meta description is missing, sometimes the SEO title is too long. JSON schema enforcement on every model call means every product gets every field, within every constraint, or the run retries.
→ Zero partial publishes across 2,000 products. Either all four copy fields were present and within spec, or nothing was written to Shopify.Inside the
Factory.
Product discovery
An n8n cron job runs nightly and paginates through the Shopify product catalog via the Admin API, using link-header pagination to handle collections of any size. Products missing a description, or flagged for refresh, are queued for processing. Google Sheets acts as the orchestration layer and audit trail.
Image analysis — GPT-4o Vision
Each product's primary image is passed to GPT-4o Vision with a structured extraction prompt. The model identifies visible attributes: material composition, colour names, texture, apparent dimensions, and notable design details. Output is enforced as JSON schema — if a field can't be determined from the image, it's null rather than guessed.
Brand context research — Perplexity
Extracted attributes are cross-referenced against live web sources via Perplexity. This step verifies material claims, retrieves correct care instructions for fabric types, and surfaces any brand-specific product context. It acts as a fact-check layer before copy is written — preventing confident hallucinations about certifications or origin claims.
Copy generation — Claude 3.5 Sonnet
Verified attributes and brand context are passed to Claude 3.5 Sonnet with Atelier Voss's house style guide embedded in the system prompt. Claude generates four outputs per product: SEO title, meta description, H1, and body copy. Structured output is enforced — every field must be populated or the run fails and retries.
Editorial staging
Generated copy is written to Google Sheets alongside the source product ID, confidence flags, and the Perplexity fact-check summary. The editorial team reviews flagged rows — typically fewer than 5% of the total — before anything goes live. Approved rows are marked in the sheet; rejected rows are re-queued with a note.
Shopify publish
Approved copy is pushed to Shopify via the Admin API using a bulk update mutation. Descriptions, SEO title, and meta description fields are updated atomically. A daily analytics enrichment step then joins Shopify sales data to each product's description version in the Sheet — so the team can see whether AI-generated copy converts better than their originals.
Numbers Worth
Shipping For.
Calls Worth
Explaining.
over GPT-4o
over Shopify metafields as staging
over web search scraping