--- name: generate-v2 description: Generate UI prototypes using target-style-centric batch generation usage: /workflow:ui-design:generate-v2 [--targets ""] [--target-type "page|component"] [--base-path ] [--session ] [--style-variants ] [--layout-variants ] examples: - /workflow:ui-design:generate-v2 --session WFS-auth --targets "dashboard,settings" --style-variants 3 --layout-variants 3 - /workflow:ui-design:generate-v2 --base-path ".workflow/WFS-auth/design-run-20250109-143022" --targets "home,pricing" - /workflow:ui-design:generate-v2 --targets "navbar,hero,card" --target-type "component" --style-variants 2 --layout-variants 2 allowed-tools: TodoWrite(*), Read(*), Write(*), Task(ui-design-agent), Bash(*) --- # UI Generation Command (Target-Style-Centric Architecture) **Executor**: → @ui-design-agent **Parallel Generation**: Phase 2 → @ui-design-agent (T×S tasks, each handling L layouts) ## Overview Generate production-ready UI prototypes (HTML/CSS) using **target-style-centric batch generation**. Each agent handles all layout variants for one target × one style combination, ensuring component isolation and focused generation. ## Core Philosophy - **Target-Style-Centric**: Each of T×S agents generates L layouts for one target × one style - **Component Isolation**: Tasks completely independent, preventing cross-component interference - **Style-Aware Structure**: HTML DOM adapts based on design_attributes (density, visual_weight, etc.) - **Performance Optimized**: T×S agent calls with highly focused scope per agent - **Layout Inspiration**: Simple text-based research replaces complex JSON planning - **Self-Contained CSS**: Agent reads design-tokens.json and creates independent CSS (no token.css reference) - **Production-Ready**: Semantic HTML5, ARIA attributes, responsive design ## Execution Protocol ### Phase 1: Path Resolution & Context Loading ```bash # 1. Determine base path IF --base-path: base_path = {provided_base_path} ELSE IF --session: base_path = find_latest_path_matching(".workflow/WFS-{session}/design-*") ELSE: base_path = find_latest_path_matching(".workflow/.design/*") # 2. Determine style variant count and layout variant count style_variants = --style-variants OR auto_detect_from_consolidation() layout_variants = --layout-variants OR 3 VALIDATE: 1 <= style_variants <= 5 VALIDATE: 1 <= layout_variants <= 5 # Validate against actual style directories actual_style_count = count_directories({base_path}/style-consolidation/style-*) IF actual_style_count == 0: ERROR: "No style directories found"; SUGGEST: "Run /workflow:ui-design:consolidate first"; EXIT 1 IF style_variants > actual_style_count: WARN: "⚠️ Requested {style_variants}, but only {actual_style_count} exist" REPORT: " Available styles: {list_directories}"; style_variants = actual_style_count REPORT: "✅ Validated style variants: {style_variants}" # 3. Enhanced target list parsing with type detection target_list = []; target_type = "page" # Default # Priority 1: Unified --targets parameter IF --targets: raw_targets = {--targets value} target_list = split_and_clean(raw_targets, delimiters=[",", ";", "、"]) target_list = [t.strip().lower().replace(" ", "-") for t in target_list if t.strip()] target_type = --target-type provided ? {--target-type} : detect_target_type(target_list) REPORT: "🎯 Using provided targets ({target_type}): {', '.join(target_list)}" # Priority 2: Legacy --pages parameter ELSE IF --pages: raw_targets = {--pages value} target_list = split_and_clean(raw_targets, delimiters=[",", ";", "、"]) target_list = [t.strip().lower().replace(" ", "-") for t in target_list if t.strip()] target_type = "page" REPORT: "📋 Using provided pages (legacy): {', '.join(target_list)}" # Priority 3: Extract from synthesis-specification.md ELSE IF --session: synthesis_spec = Read(.workflow/WFS-{session}/.brainstorming/synthesis-specification.md) target_list = extract_targets_from_synthesis(synthesis_spec); target_type = "page" REPORT: "📋 Extracted from synthesis: {', '.join(target_list)}" # Priority 4: Detect from existing prototypes or default ELSE: target_list = detect_from_prototypes({base_path}/prototypes/) OR ["home"]; target_type = "page" REPORT: "📋 Detected/default targets: {', '.join(target_list)}" # 4. Validate target names validated_targets = [t for t in target_list if regex_match(t, r"^[a-z0-9][a-z0-9_-]*$")] invalid_targets = [t for t in target_list if t not in validated_targets] IF invalid_targets: REPORT: "⚠️ Skipped invalid target names: {', '.join(invalid_targets)}" VALIDATE: validated_targets not empty, "No valid targets found" target_list = validated_targets STORE: target_list, target_type # 5. Verify design systems exist FOR style_id IN range(1, style_variants + 1): VERIFY: exists({base_path}/style-consolidation/style-{style_id}/design-tokens.json) # 6. Load design space analysis (for style-aware generation) design_space_path = "{base_path}/style-extraction/design-space-analysis.json" IF exists(design_space_path): design_space_analysis = Read(design_space_path) REPORT: "📊 Loaded design space analysis with style attributes" ELSE: WARN: "⚠️ No design space analysis found - will use basic style generation" design_space_analysis = null # 7. Load requirements (if integrated mode) IF --session: synthesis_spec = Read(.workflow/WFS-{session}/.brainstorming/synthesis-specification.md) ELSE: synthesis_spec = null ``` ### Phase 1.5: Target Layout Inspiration ```bash REPORT: "💡 Gathering layout inspiration for {len(target_list)} targets..." CREATE: {base_path}/prototypes/_inspirations/ # For each target, gather layout inspiration via MCP search FOR target IN target_list: REPORT: " Researching '{target}' ({target_type}) layout patterns..." # MCP search for layout patterns search_query = f"common {target} {target_type} layout patterns variations best practices" search_results = mcp__exa__web_search_exa( query=search_query, numResults=5 ) # Extract key layout patterns from search results inspiration_content = f"""Layout Inspiration for '{target}' ({target_type}) Generated: {current_timestamp()} Search Query: {search_query} ## Layout Patterns Identified From web research, {layout_variants} distinct layout approaches: Layout 1: [First structural pattern identified from search] - Key characteristics: ... - Structure approach: ... Layout 2: [Second structural pattern] - Key characteristics: ... - Structure approach: ... Layout 3: [Third structural pattern] - Key characteristics: ... - Structure approach: ... ## Reference Links {format_search_results_urls(search_results)} ## Implementation Notes - Each layout should be STRUCTURALLY DIFFERENT (not just CSS variations) - Consider {target_type}-specific patterns (navigation, content areas, interactions) - Adapt structure based on design_attributes in Phase 2 """ # Write simple inspiration file inspiration_file = f"{base_path}/prototypes/_inspirations/{target}-layout-ideas.txt" Write(inspiration_file, inspiration_content) REPORT: f" ✓ Created: {target}-layout-ideas.txt" REPORT: f"✅ Phase 1.5 complete: Gathered inspiration for {len(target_list)} targets" ``` ### Phase 2: Target-Style-Centric Batch Generation **Strategy**: T×S target-style-centric agents, each generating L layouts for one target × one style. **Performance**: T×S agent calls with component isolation ```bash REPORT: "🎨 Phase 2: Launching {len(target_list)}×{style_variants}={len(target_list) * style_variants} target-style agents..." REPORT: " Each agent generates {layout_variants} layouts for one component" CREATE: {base_path}/prototypes/ # Launch ONE agent task PER TARGET × STYLE combination (parallel execution) FOR target IN target_list: # Load layout inspiration for this target inspiration_path = f"{base_path}/prototypes/_inspirations/{target}-layout-ideas.txt" FOR style_id IN range(1, style_variants + 1): # Load style-specific context style_tokens_path = f"{base_path}/style-consolidation/style-{style_id}/design-tokens.json" style_guide_path = f"{base_path}/style-consolidation/style-{style_id}/style-guide.md" # Extract design attributes for this style (if available) IF design_space_analysis AND style_id <= len(design_space_analysis.divergent_directions): design_attributes = design_space_analysis.divergent_directions[style_id - 1] philosophy_name = design_attributes.philosophy_name attributes_summary = JSON.stringify({ density: design_attributes.design_attributes.density, visual_weight: design_attributes.design_attributes.visual_weight, formality: design_attributes.design_attributes.formality, organic_vs_geometric: design_attributes.design_attributes.organic_vs_geometric, innovation: design_attributes.design_attributes.innovation }) ELSE: design_attributes = null philosophy_name = f"Style {style_id}" attributes_summary = "No design attributes available" Task(ui-design-agent): """ [TARGET_STYLE_UI_GENERATION] ## 🎯 Mission Generate {layout_variants} layout variants for: {target} × Style-{style_id} ({philosophy_name}) Output: {layout_variants × 2} files ({layout_variants} HTML + {layout_variants} CSS) ## 🎨 Style Context PHILOSOPHY: {philosophy_name} {IF design_attributes: DESIGN_ATTRIBUTES: {attributes_summary} Key impacts: - density → DOM nesting depth, whitespace scale - visual_weight → wrapper layers, border/shadow strength - formality → semantic structure choices - organic_vs_geometric → alignment, edge treatment - innovation → layout adventurousness } ## 📂 Input Resources **Design System**: - Design Tokens (JSON): {style_tokens_path} - Style Guide: {style_guide_path} **Layout Inspiration**: {inspiration_path} Contains {layout_variants} distinct structural patterns **Target**: {target} ({target_type}) ## 🔄 Generation Steps (for each layout 1..{layout_variants}) **1. Read Inspiration** - Load: {inspiration_path} - Apply layout N pattern **2. Read Design Tokens** - Load: {style_tokens_path} - Parse JSON structure and extract all design token values - Understand token categories: colors, typography, spacing, shadows, borders, etc. **3. Generate HTML Structure** - Complete HTML5 document (, , , ) - Semantic elements:
,