← All projects

professional

Illux Product AI

Generative-AI product enrichment & room visualization for Shopware 6

3,000+products enriched
1,000+hours of manual work removed
4languages per call

A production Shopware 6 plugin that turns product images into multilingual copy, SEO, categories and tags with generative AI, and lets shoppers see artwork on their own wall before buying. Designed, built and deployed as sole developer.

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.

Version: 3.2.1 · Compatibility: Shopware 6.6 - 6.7 · Developer: Christoffer Maintz, for WEXO A/S

Built as a final exam project. This is the version that I handed in for my exam, and not the final, polished version shipped to the customer.


Features

  • Batch image analysis - up to 6 products per API call with retry and exponential backoff
  • Multi-language content - generates da-DK, en-GB, nn-NO and sv-SE output simultaneously
  • SEO metadata - meta title, meta description, and keywords per language
  • Product descriptions - customer-facing copy generated from the product image
  • Property suggestions - AI assigns or proposes product properties from a whitelisted set
  • Confidence scoring - heuristic quality check flags low-confidence results for manual review
  • 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

Requirements


Installation

  1. Clone or copy this repository into custom/static-plugins/ImageAi on your Shopware instance.
  2. Run:
    bin/console plugin:refresh
    bin/console plugin:install --activate CMaintzImageAi
    bin/console cache:clear

Configuration

In the Shopware admin go to Extensions → My extensions → Image AI → Configure and set:

Setting Description
Gemini API Key Your Google AI Studio API key
Analysis model Gemini model to use (default: gemini-2.5-flash)
Languages Which languages to generate content for
Auto-approve Apply results automatically or hold for review
Confidence threshold Minimum score before a result is flagged for review
Scheduled analysis Enable/disable automatic background analysis

Usage

Admin UI: Extensions menu → AI Image Tools

CLI:

# Analyze all unanalyzed eligible products (alias: img-ai:aa)
bin/console img-ai:analyze:all

# Re-analyze products that were already analyzed
bin/console img-ai:analyze:all --include-analyzed

API:

POST /api/_action/image-ai-tools/analyze-products
POST /api/_action/image-ai-tools/analyze-all-products
GET  /api/_action/image-ai-tools/batch-job/{id}

Documentation

Detailed docs are in the docs/ folder:


License

Proprietary - © WEXO A/S

command.exeesc

↑↓ select · Tab complete · Enter run · Esc close

doom.exe

WASD move · ←→ turn · Space fire · E use · Shift run · Enter menu · licences