Automatically generates a professional product promotional catalog as a self-contained HTML package from product data. Executes the full catalog production pipeline — planning, data normalization, design, copywriting, and validation — in a single pass without user feedback.
Analyzes product data (CSV/JSON/text/URL) and produces a production-grade HTML catalog by applying professional catalog designers' workflows and expert know-how.
Core Principles:
$CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md/frontend-design skill integration — polished, production-grade design (prevents generic AI aesthetics)fect-image MCP integration — auto-generates hero banners, lifestyle images, editorial illustrations, and category visualsOutput location: catalog/{catalog-name}/
LANGUAGE RULE: Before executing this skill, read the project's
CLAUDE.mdand check the## Languagesection to detect the project language. If the project language is NOT Korean (ko), you MUST translate ALL user-facing output — including HTML page titles, labels, placeholder text, navigation text — into the project language. Technical identifiers (file paths, CSS variable names, class names) remain untranslated. If noCLAUDE.mdexists or no## Languagesection is found, default to Korean.
Analyze $ARGUMENTS to determine the product data source:
| Argument Type | Action |
|---|---|
CSV/JSON file path (e.g. products.csv) | Read file and extract product list |
Directory path (e.g. data/products/) | Collect all data files + images from directory |
URL (e.g. https://example.com/products) | Store as {SERVICE_URL} — Chrome MCP captures product screenshots from live site |
Text description (e.g. 5 premium kitchen items) | Structure product data from text input |
| (empty) | Auto-scan current directory for product data files (*.csv, *.json, *.xlsx, etc.) |
Normalize collected data into the internal standard structure:
{
"catalog": {
"name": "{catalog-name}",
"brand": "{brand-name}",
"tagline": "{brand-slogan}",
"contact": { "phone": "", "email": "", "website": "", "address": "" }
},
"categories": [
{
"id": "cat-01",
"name": "{category-name}",
"description": "{category-description}",
"products": [
{
"id": "prod-001",
"name": "{product-name}",
"price": 0,
"originalPrice": null,
"description": "{product-description}",
"features": ["{feature-1}", "{feature-2}"],
"specs": { "{spec-key}": "{value}" },
"images": ["{image-path}"],
"badges": [],
"crossSell": ["{related-product-id}"],
"tier": "standard|premium|budget"
}
]
}
]
}
Data Enrichment Rules:
Contact Us labelfect-image MCP based on product descriptioncrossSell field auto-maps IDs of same-category or complementary productstier auto-classifies based on price distribution (top 20% → premium, bottom 20% → budget)Read the following reference files to load expert know-how into context:
$CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md — Full workflow & know-how$CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md — HTML structure templates$CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md — CSS component templatesAnalyze product data characteristics to autonomously decide the design tone:
| Product Characteristics | Auto-Selected Design Tone | Rationale |
|---|---|---|
| Luxury/premium (high price, few items) | Editorial Luxury | Generous whitespace, large images, serif typography |
| Tech/electronics | Modern Minimal | Clean layout, spec tables, sans-serif |
| Fashion/beauty/lifestyle | Bold & Vibrant | Emotional visuals, lifestyle shots, bold colors |
| Food/beverage | Soft & Warm | Warm tones, soft curves, friendly copy |
| B2B/industrial/components | Professional Enterprise | High-density grid, comparison tables, trust signals |
| Children/education/toys | Playful Bright | Bright colors, rounded corners, fun illustrations |
| Mixed/indeterminate | Refined Minimal | Safe universal choice — clean and polished |
Store the determined tone as {DESIGN_TONE} and use it as the basis for all subsequent design decisions.
If {SERVICE_URL} is available (URL argument provided), plan Chrome MCP screenshot capture:
Navigate & Analyze: Open {SERVICE_URL} via Chrome MCP and take a snapshot to understand the site structure
mcp__chrome-devtools__navigate_page({ url: "{SERVICE_URL}" })
mcp__chrome-devtools__wait_for({ selector: "body", timeout: 10000 })
mcp__chrome-devtools__take_snapshot()
Build Screenshot Plan — Map product data to live pages/routes:
| Screenshot Type | When to Capture | Purpose |
|---|---|---|
| Product detail page | Each product has a dedicated URL | Hero-quality product showcase |
| Product listing/grid | Category pages exist | Category overview visuals |
| Product in-use / demo | Interactive features available | "See it in action" showcase |
| Key UI moments | Checkout, config, comparison pages | Trust-building screenshots |
| Mobile views | Always (responsive resize) | Mobile-first showcase |
Store as {SCREENSHOT_PLAN} — Array of { url, selector, description, category, viewport } entries
If no {SERVICE_URL} is provided, set {SCREENSHOT_PLAN} to empty — all visuals will come from fect-image AI generation.
Automatically determine page structure based on product count and categories:
| Component | Rule |
|---|---|
| Cover | Always included — brand name, tagline, hero image |
| Brand Story | Included when 10+ products — 1 page |
| Table of Contents | Included when 3+ categories |
| Category Dividers | Included when 2+ categories — entry page per category |
| Product Detail Pages | All products — 1–4 per page (based on importance & image size) |
| Cross-Selling Sections | Auto-placed when 3+ products in a category |
| Bundle/Set Proposals | Auto-generated when complementary product relationships detected |
| Order/Contact Info | Always included — last page |
Per-product space allocation within pages:
| Product Tier | Page Occupancy | Image Size |
|---|---|---|
| Hero (top revenue/new arrivals) | 1 product / full spread | 60%+ of page |
| Premium | 1–2 products / page | 40–50% of page |
| Standard | 2–3 products / page | 30% of page |
| List (high item count) | 4–6 products / page (grid) | Thumbnail |
Additional visual sections (auto-included when applicable):
| Component | Rule |
|---|---|
| Screenshot Showcase | Included when {SERVICE_URL} provided — "See it in action" section with browser-chrome frames |
| Editorial Illustrations | Always included — fect-image generates mood/atmosphere illustrations between categories |
| Product Gallery | Included for hero/premium tier products — multi-angle screenshots + lifestyle shots |
catalog/{catalog-name}/
├── index.html # Cover + TOC + navigation hub
├── pages/ # Individual page HTML files
│ ├── 01-cover.html # Cover (standalone view)
│ ├── 02-brand-story.html # Brand story (optional)
│ ├── 03-{category}.html # Category product pages
│ ├── {NN}-showcase.html # Screenshot showcase — "See it in action" (when SERVICE_URL)
│ └── XX-contact.html # Order/contact info
├── assets/
│ ├── tokens.css # Design tokens (colors, typography, spacing)
│ ├── catalog-base.css # Layout & typography
│ ├── catalog-components.css # Product cards, badges, CTAs, screenshots, illustrations
│ ├── catalog-print.css # Print-optimized styles
│ └── catalog-interactions.css # Hover, transitions, animations
├── images/ # Product images + AI-generated visuals
│ ├── hero/ # Hero banner images
│ ├── products/ # Product images
│ ├── lifestyle/ # Lifestyle shots (AI-generated)
│ ├── illustrations/ # Editorial illustrations (AI-generated, mood/atmosphere)
│ ├── categories/ # Category visuals (AI-generated)
│ └── screenshots/ # Chrome MCP captured screenshots
│ ├── desktop/ # Desktop viewport (1280×800)
│ ├── tablet/ # Tablet viewport (768×1024)
│ └── mobile/ # Mobile viewport (375×812)
└── shared/
├── nav.js # Navigation (page transitions, TOC)
├── interactions.js # Interactions (filter, search, gallery, screenshot tabs)
└── theme.js # Dark mode, font size adjustment
Create assets/tokens.css based on {DESIGN_TONE}.
Reference the tone-specific token presets in $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md to define CSS Custom Properties.
If the project has src/styles/design-tokens.css, extend it with catalog-specific tokens. Otherwise, use the reference default tokens.
Tokens must include:
--cat-color-primary, --cat-color-accent, --cat-color-bg, --cat-color-text, --cat-color-price, --cat-color-badge-*--cat-font-display, --cat-font-body, --cat-font-size-*, --cat-font-weight-*--cat-spacing-*, --cat-radius-*--cat-page-max-width, --cat-grid-gap, --cat-product-card-min-width[data-theme="dark"] variable setReference $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md to create 4 CSS files:
catalog-base.css — Layout, grid, typography, responsive breakpointscatalog-components.css — Product cards, price tags, badges, CTA buttons, comparison tables, bundle boxescatalog-print.css — A4 print optimization (page breaks, margins, resolution)catalog-interactions.css — Hover effects, page transitions, gallery animationsInvoke the /frontend-design skill to apply polished design matching {DESIGN_TONE}:
/frontend-design Catalog design system — tone: {DESIGN_TONE}, purpose: product promotional catalog, components: product card / price tag / CTA button / badge / comparison table / bundle box
Reference the JS section of $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md to create 3 JS files:
nav.js — Page navigation, side TOC, current location highlight, keyboard navigation (← →)interactions.js — Product filter, search, image gallery (lightbox), comparison featuretheme.js — Dark/light mode toggle, font size adjustment, localStorage settings persistenceThis step produces all visual assets that elevate the catalog from basic to premium quality. Two parallel tracks:
{SERVICE_URL} available){SERVICE_URL} available)Skip this section entirely if
{SCREENSHOT_PLAN}is empty.
For each entry in {SCREENSHOT_PLAN}:
Navigate to target page:
mcp__chrome-devtools__navigate_page({ url: "{entry.url}" })
mcp__chrome-devtools__wait_for({ selector: "{entry.selector}", timeout: 10000 })
Clean up UI for catalog-quality capture — inject CSS via evaluate_script to hide distracting elements:
// Inject cleanup styles for catalog-quality screenshots
var style = document.createElement('style');
style.id = 'catalog-capture-style';
style.textContent = `
.cookie-banner, .chat-widget, .popup-overlay,
[class*="cookie"], [class*="chat-bot"], [class*="intercom"],
[class*="notification-bar"] { display: none !important; }
`;
document.head.appendChild(style);
Optional: Highlight key product area — for product detail pages, add a subtle focus effect:
// Add premium highlight to product showcase area
var target = document.querySelector('{entry.selector}');
if (target) {
target.style.boxShadow = '0 0 0 3px rgba(var(--highlight-rgb, 37,99,235), 0.15)';
target.style.borderRadius = '12px';
}
Desktop capture (1280×800):
mcp__chrome-devtools__resize_page({ width: 1280, height: 800 })
mcp__chrome-devtools__take_screenshot()
→ Save to images/screenshots/desktop/{entry.category}-{N}.png
Tablet capture (768×1024):
mcp__chrome-devtools__resize_page({ width: 768, height: 1024 })
mcp__chrome-devtools__take_screenshot()
→ Save to images/screenshots/tablet/{entry.category}-{N}.png
Mobile capture (375×812):
mcp__chrome-devtools__resize_page({ width: 375, height: 812 })
mcp__chrome-devtools__take_screenshot()
Multi-step flow capture — For interactive product demos (configurators, dashboards, etc.):
mcp__chrome-devtools__click(), mcp__chrome-devtools__fill(), mcp__chrome-devtools__press_key()mcp__chrome-devtools__wait_for() for result{category}-step-{N}.png for sequential displayUse mcp__fect-image__image_text2img to generate the cover hero image.
Prompt composition — use rich, art-directed prompts for premium quality:
Cinematic product catalog hero banner, {product-category} theme,
{DESIGN_TONE} aesthetic, premium commercial photography,
dramatic lighting, shallow depth of field, editorial magazine quality,
{brand-color} color accent, ultra-wide 21:9 composition,
negative space for text overlay on the left third
Save generated image to images/hero/.
If there are 2+ categories, generate a divider image for each category.
Prompt composition:
{category-name} product category editorial visual, {DESIGN_TONE} style,
abstract artistic background, luxury commercial catalog quality,
soft gradient lighting, cinematic color grading, 3:2 aspect ratio
Save generated images to images/categories/.
Generate mood/atmosphere illustrations placed between categories and in feature sections. These elevate the catalog from a simple product list to an editorial experience.
| Illustration Type | Placement | Prompt Strategy |
|---|---|---|
| Mood separator | Between categories | Abstract, atmospheric, brand-color gradients |
| Lifestyle scene | Near hero/premium products | Product in aspirational real-life context |
| Detail texture | Background for spec sections | Macro texture, material close-up |
| Infographic base | Feature comparison sections | Clean geometric, data-visualization style |
| Brand atmosphere | Brand story page | Emotional, storytelling visual |
Prompt composition per type:
Mood separator:
Abstract artistic illustration, {DESIGN_TONE} aesthetic,
flowing {brand-color} gradients, organic shapes, editorial magazine divider,
minimalist composition, ultra-clean, no text, 4:1 wide panoramic
Lifestyle scene:
{product-name} in {aspirational-context}, editorial lifestyle photography,
{target-audience-lifestyle} setting, warm natural lighting,
magazine-quality composition, {DESIGN_TONE} color palette, 16:9
Detail texture:
Macro close-up of {product-material/texture}, abstract product detail,
{DESIGN_TONE} color grading, shallow depth of field,
premium material texture, subtle bokeh, 3:2 aspect ratio
Infographic base:
Clean geometric abstract background, {DESIGN_TONE} color scheme,
subtle grid pattern, modern data visualization aesthetic,
plenty of negative space for overlay content, 16:9
Brand atmosphere:
{brand-story-theme} conceptual illustration, {DESIGN_TONE} editorial style,
cinematic dramatic lighting, emotional storytelling mood,
abstract artistic interpretation, premium quality, 2:1 wide
Save generated images to images/illustrations/.
Generation rules:
For products with no provided images and no Chrome MCP screenshots, generate lifestyle images:
{product-name} in real-life premium setting, editorial product photography,
{usage-scene-description}, dramatic studio lighting with natural fill,
{DESIGN_TONE} mood, luxury commercial catalog quality,
styled with complementary props, shallow depth of field, 4:5 portrait
Save generated images to images/lifestyle/.
Rule: Generate only the minimum required images — prioritize Chrome MCP screenshots over AI generation. For products with both a service URL and AI images, use screenshots for "in action" views and AI images for aspirational lifestyle shots. Skip AI image generation for any product that already has user-provided images.
Apply Section 5 (Copywriting Know-How) from $CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md to generate all text content.
Generate a main catalog headline matched to brand and product characteristics:
{DESIGN_TONE} (luxury → restrained elegance, B2B → trust & efficiency)Write intro copy for each category entry page:
Generate copy for every product in the following structure:
[Headline] — 1 line, attention-grabbing benefit-driven phrase
[Subhead] — 1 line, key differentiator summary
[Body] — 2–3 lines, storytelling + sensory language
[Bullets] — 3–5 key specs/features
Copywriting Rules:
Reference $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md to generate each page's HTML.
pages/01-cover.html){SERVICE_URL} available: overlay subtle screenshot montage (3 device frames at angle) in backgroundpages/02-brand-story.html, when 10+ products){SERVICE_URL} available: embed 1–2 key screenshots in browser-chrome frames as "trust signals"pages/03-{category}.html)Generate one HTML file per category. Structure:
Apply expert know-how for product placement:
Product card HTML structure (enhanced with screenshot gallery and illustrations):
<article class="product-card product-card--{tier}" data-product-id="{id}">
<div class="product-card__badges">
<span class="badge badge--{type}">{badge-text}</span>
</div>
<div class="product-card__image">
<img src="../images/products/{image}" alt="{product-name}" loading="lazy">
</div>
<!-- Screenshot Gallery (hero/premium products with SERVICE_URL only) -->
<div class="product-card__screenshot-gallery">
<div class="screenshot-tabs">
<button class="screenshot-tab screenshot-tab--active" data-viewport="desktop">Desktop</button>
<button class="screenshot-tab" data-viewport="tablet">Tablet</button>
<button class="screenshot-tab" data-viewport="mobile">Mobile</button>
</div>
<div class="screenshot-panels">
<div class="screenshot-panel screenshot-panel--active" data-viewport="desktop">
<div class="screenshot-frame screenshot-frame--browser">
<div class="screenshot-frame__chrome">
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__url">{SERVICE_URL}/{product-route}</span>
</div>
<img src="../images/screenshots/desktop/{screenshot}" alt="{product-name} desktop view" loading="lazy">
</div>
</div>
<div class="screenshot-panel" data-viewport="tablet">
<div class="screenshot-frame screenshot-frame--tablet">
<img src="../images/screenshots/tablet/{screenshot}" alt="{product-name} tablet view" loading="lazy">
</div>
</div>
<div class="screenshot-panel" data-viewport="mobile">
<div class="screenshot-frame screenshot-frame--mobile">
<img src="../images/screenshots/mobile/{screenshot}" alt="{product-name} mobile view" loading="lazy">
</div>
</div>
</div>
</div>
<div class="product-card__content">
<h3 class="product-card__name">{headline}</h3>
<p class="product-card__subtitle">{subhead}</p>
<p class="product-card__description">{body}</p>
<ul class="product-card__features">
<li>{feature-1}</li>
<li>{feature-2}</li>
</ul>
<div class="product-card__pricing">
<span class="price price--original">{original-price}</span>
<span class="price price--current">{current-price}</span>
</div>
<a href="#contact" class="cta-button">{cta-text}</a>
</div>
<div class="product-card__cross-sell">
<p>You may also like</p>
<div class="cross-sell-items">
<!-- Related product thumbnails -->
</div>
</div>
</article>
<!-- Editorial Illustration Break (between product groups) -->
<div class="illustration-break">
<img src="../images/illustrations/{mood-separator}" alt="" role="presentation" loading="lazy">
</div>
Note: The
.product-card__screenshot-galleryblock is only included for hero/premium tier products that have Chrome MCP screenshots. Omit entirely for products without screenshots. The.illustration-breakis inserted between logical product groups (e.g., after every 3–4 products or between tier boundaries).
pages/{NN}-showcase.html, when {SERVICE_URL} available)A dedicated "See it in action" page that showcases the product/service through captured screenshots — this is the premium differentiator that builds trust and demonstrates real product quality.
Structure:
<div class="showcase-flow">
<div class="showcase-step">
<div class="showcase-step__number">1</div>
<div class="showcase-step__screenshot">
<div class="screenshot-frame screenshot-frame--browser">
<div class="screenshot-frame__chrome">
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__url">{url}</span>
</div>
<img src="../images/screenshots/desktop/{screenshot}" alt="{step-description}" loading="lazy">
</div>
</div>
<div class="showcase-step__content">
<h3>{step-title}</h3>
<p>{step-description}</p>
</div>
</div>
</div>
Apply editorial illustration backgrounds from Step 2.D as subtle section dividers within the showcase page.
pages/XX-contact.html)index.html)Entry point for the entire catalog — includes:
<main> content from pages/*.html and assembles into a single-scroll view (SPA-style)Automatically validate all generated files against the following criteria:
| Validation Item | Criteria |
|---|---|
| File Existence | index.html + all pages/*.html + 4 CSS files + 3 JS files |
| HTML Validity | No unclosed tags, no broken relative paths |
| Image References | All <img src> paths match actual files in images/ |
| Screenshot References | All images/screenshots/ paths match captured files (when {SERVICE_URL}) |
| Illustration References | All images/illustrations/ paths match generated files |
| Link Integrity | All internal page-to-page links are valid |
| Screenshot Tabs | Desktop/tablet/mobile tabs work correctly (JS interaction test) |
| Responsiveness | 3-tier @media queries (mobile/tablet/desktop) present |
| Dark Mode | [data-theme="dark"] styles present for all components incl. screenshot frames |
| Print Styles | catalog-print.css contains @page, break-*, and screenshot print rules |
| Product Count Match | Input data product count = HTML product card count |
| Visual Quality | Illustration breaks placed between categories, no consecutive text-only sections |
If broken references are found, fix them immediately.
## Catalog Generation Complete
### Basic Info
- **Catalog Name**: {catalog-name}
- **Design Tone**: {DESIGN_TONE}
- **Service URL**: {SERVICE_URL or "N/A — AI visuals only"}
- **Total Products**: {N} ({category-count} categories)
- **Total Pages**: {N} pages
### Generated Files
| File | Description |
|------|-------------|
| `catalog/{name}/index.html` | Main entry point (cover + TOC + unified view) |
| `catalog/{name}/pages/*.html` | {N} individual pages |
| `catalog/{name}/pages/{NN}-showcase.html` | Screenshot showcase page (if SERVICE_URL) |
| `catalog/{name}/assets/*.css` | 4 stylesheets |
| `catalog/{name}/shared/*.js` | 3 JS modules |
| `catalog/{name}/images/` | {N} total image assets |
### Visual Assets
| Type | Count | Source |
|------|-------|--------|
| Chrome MCP Screenshots | {N} (desktop: {N}, tablet: {N}, mobile: {N}) | Live service capture |
| Hero Banner | 1 | fect-image AI |
| Category Visuals | {N} | fect-image AI |
| Editorial Illustrations | {N} (mood: {N}, lifestyle: {N}, texture: {N}) | fect-image AI |
| Lifestyle Shots | {N} | fect-image AI |
| User-Provided Images | {N} | Original data |
### Applied Sales Strategies
- Cross-selling sections: {N}
- Bundle proposals: {N}
- Price anchoring: {applied/not-applied}
- CTA placements: {N} total
- Screenshot showcase: {"included — builds trust with real product visuals" / "not included — no SERVICE_URL"}
### Preview
> Open `catalog/{name}/index.html` in a browser to preview.
> Print: Use browser print (Cmd+P) for A4-optimized output.
→ Save to images/screenshots/mobile/{entry.category}-{N}.png
Cleanup injected styles — evaluate_script to remove #catalog-capture-style and reset inline styles
Restore desktop viewport:
mcp__chrome-devtools__resize_page({ width: 1280, height: 800 })