Et Shopware 6-plugin i produktion, der omdanner produktbilleder til flersproget tekst, SEO, kategorier og tags med generativ AI, og lader kunder se kunstværket på deres egen væg, før de køber. Designet, bygget og udrullet som eneste udvikler.
Den fulde case er skrevet på engelsk.
The problem
Illux sells artwork online, and the categories, tags, metadata and translations for its catalogue didn’t exist in any data source. Every product’s description, SEO metadata, categories and per-language translations (Danish, English, Norwegian, Swedish) had to be written by hand, a large and recurring cost as the catalogue grew. At the other end of the funnel, wall art is hard to sell online because customers can’t picture it on their wall.
What I built
A Shopware 6 plugin with two halves, a PHP 8.1+ backend, a Vue admin UI and a TypeScript storefront, built end to end as sole developer: problem framing, design, data modelling, implementation, testing, deployment and operation. I made the key technical decisions (messaging, processing flow, resilience) in close dialogue with my mentor, the project lead and the customer.
It started as an ambitious exam project where only part was expected to get built. It was finished in full and deployed to production a few days before the internship ended.
Product enrichment. Product images, plus name, manufacturer and attributes, go to a generative-AI API through a shared, provider-agnostic abstraction layer, and come back as schema-enforced JSON: SEO metadata, customer-facing descriptions and whitelisted property, category and tag assignments in four languages from a single call. Processing runs asynchronously through Symfony Messenger over RabbitMQ, so batches never block a web request.
Artwork visualization. On the product page, shoppers choose frame, size and approximate print material, then pick curated room scenes or upload a photo of their own room. The piece is composited into each scene with frame-accurate rendering, and each tile updates the moment it’s ready over server-sent events. An admin module generates new photorealistic interiors from structured photographic parameters (scene type, décor style, lens, angle, lighting, mood, palette), held in a pending-approval queue. Try it live on an Illux product page: click “visualiser i flere rum”.
Technical highlights
Event-driven modular monolith - architecture chosen from concrete analysis of payload sizes, product volume and scaling needs
Schema-enforced AI output - no brittle text parsing; four languages in one call; the LLM provider can be swapped without touching domain logic
Resilient batching - up to 500 products per run (6 per API call), retry with exponential backoff, idempotency, rate limiting and caching against external AI services
Configurable confidence model - every weight is adjustable, with thresholds for description, title and metadata length and keyword counts, plus customer-managed lists of unwanted words that lower the score
Human-in-the-loop approval - a transaction-safe workflow with an adjustable review threshold; the customer can switch off review routing (full auto-apply) or auto-apply (everything reviewed), plus a time-savings dashboard
Full audit trail - reviewer, exact prompt, model + version, confidence, approval history and batch provenance for every analysis
Evaluation & regression harness - compares models and prompt strategies on average confidence, and catches quality drift across model and prompt changes
Deliberate patterns - orchestrators per workflow, Builder + Director for prompts, factories for requests and schemas, Message/Handler commands, cache-invalidating subscribers
Deep Shopware integration - custom DAL entities + translations, 8 migrations, installers, a scheduled task and a CLI command
Result
For most of the catalogue it eliminated manual enrichment work entirely across 3,000+ products at 15-20 minutes each: 1,000+ hours on the existing catalogue alone. It became a business-critical part of Illux’s platform, is still in daily use, and laid the foundation for an upcoming crowdsourced artwork platform. The visualization shipped with the new storefront, with the aim of lifting product-page conversion and reducing returns caused by size or appearance mismatch.
The public repository is the version handed in for my exam, not the polished version running for the customer.
README.md - ai-auto-product-enrichment▼
Image AI - Shopware Plugin
A Shopware 6 plugin that automates product enrichment for artwork using Google Gemini. Send product cover images to the AI and get back SEO metadata, product descriptions, and property suggestions - across multiple languages in a single API call.
Approval workflow - manual review or auto-approve mode (configurable)
Scene composition - composite product artwork into existing room environment photos, with accurate frame rendering from frame-corner reference images
Scene generation - generate entirely new photorealistic room environments with AI, configurable with photographic parameters (lens, angle, lighting, mood, palette, styling)
Storefront compositor - customers can preview artwork in room scenes directly on the product page: pick predefined rooms or upload a photo of their own room, with live progress via server-sent events (TypeScript storefront plugin)
Provider-agnostic AI layer - built on Gemini, but abstracted so the LLM provider can be swapped or extended
Property whitelisting - AI can only assign pre-approved property values; new options require admin approval
Time-savings dashboard - tracks how much manual work the AI has saved
Scheduled analysis - automatic background processing on a configurable interval