design-analyzer
npx machina-cli add skill kanopi/cms-cultivator/design-analyzer --openclawDesign Analyzer Skill
Purpose
Fetch and extract technical requirements from design references (Figma URLs, screenshots, mockups) for CMS component implementation.
CRITICAL FIRST STEP: This skill MUST actively fetch design data using available tools (Figma MCP, Read tool) before performing any analysis. Never guess or infer design specifications - always fetch the actual design first.
Philosophy
Accurate design-to-code translation requires systematic extraction of technical specifications.
Core Beliefs
- Precision Over Interpretation: Extract exact values, don't guess or estimate
- Accessibility from the Start: Check contrast and touch targets during analysis
- Responsive by Default: Design for mobile first, enhance for desktop
- Document Technical Decisions: Record exact colors, spacing, typography for reproducibility
Why Design Analysis Matters
- Pixel-Perfect Implementation: Faithful translation of designer intent
- Consistent Experiences: Same colors, spacing, typography across components
- Accessibility Compliance: Catch contrast and touch target issues early
- Developer Efficiency: Clear specs eliminate guesswork
When This Skill Activates
This skill automatically activates when:
- User mentions Figma URL or Figma design
- User uploads an image file (.png, .jpg, .jpeg, .webp, .svg)
- User says phrases like:
- "implement this design"
- "create a component from this mockup"
- "build this layout"
- "convert this design to [WordPress/Drupal]"
- User asks to analyze visual design elements
- User references a "screenshot" or "wireframe"
Decision Framework
Before analyzing a design, determine:
What's the Design Source?
- Figma URL → Extract artboard structure, exact values from design tokens
- Screenshot/Image → Visual analysis, estimate values, measure ratios
- Wireframe → Structure only, minimal styling details
- Partial mockup → Analyze what's visible, note missing context
What's the Target Platform?
WordPress:
- Map to native blocks (Group, Heading, Paragraph, Buttons, Image, Columns)
- Output: Block pattern PHP file + SCSS
- Focus: Block composition and responsive classes
Drupal:
- Map to paragraph fields (text, image, link, entity reference)
- Output: Paragraph type YAML + Twig + SCSS
- Focus: Field structure and view modes
What Components Are Visible?
Layout patterns:
- Hero sections → Full-width container with content overlay
- Card grids → Repeating cards with consistent spacing
- Feature lists → Icon + heading + text patterns
- Navigation → Header with menu items
Interactive elements:
- Buttons → Identify all button states (default, hover, focus, active)
- Forms → Note input types, labels, validation states
- Links → Check text links vs. button styles
What Technical Specs Are Needed?
Always extract:
- ✅ Colors - Hex values, opacity, contrast ratios
- ✅ Typography - Font families, sizes, weights, line heights
- ✅ Spacing - Margins, padding, gaps (in px or rem)
- ✅ Layout - Grid columns, flex direction, alignment
Check for accessibility:
- ✅ Contrast ratios - Calculate for all text (4.5:1 minimum)
- ✅ Touch targets - Verify buttons ≥ 44x44px on mobile
- ✅ Focus indicators - Note if visible focus states exist
What Responsive Behavior?
Analyze breakpoints:
- Mobile (< 768px) - Stacked layout, larger touch targets
- Tablet (768-1023px) - Mixed layout, medium spacing
- Desktop (1024px+) - Full layout, smaller relative spacing
Common responsive patterns:
- Columns → Stack on mobile, side-by-side on desktop
- Font sizes → Smaller base on mobile, larger on desktop
- Images → Full width on mobile, constrained on desktop
Decision Tree
User provides design reference
↓
Identify source type (Figma/image/wireframe)
↓
Determine target platform (WordPress/Drupal)
↓
Extract visual specs (colors/typography/spacing)
↓
Check accessibility (contrast/touch targets)
↓
Map to CMS components (blocks/paragraphs)
↓
Document responsive behavior
↓
Output structured technical spec
Capabilities
Design Input Fetching & Processing
CRITICAL: This skill actively FETCHES design data before analysis:
-
Figma URLs:
- ✅ Use Figma MCP to fetch design context and code
- ✅ Use Figma MCP to capture screenshots
- ✅ Extract exact values from Figma design tokens
- ✅ Download image assets locally
- Extract node IDs, artboard names, frame structure
-
Screenshots:
- ✅ Read image files using Read tool
- Analyze visual hierarchy, layout patterns, UI components
-
Mockups: Identify design system elements, spacing, typography
-
Wireframes: Extract structure and content relationships
Component Identification
- Recognize common patterns: heroes, CTAs, cards, galleries, slideshows
- Map sections to CMS components (WordPress blocks, Drupal paragraphs)
- Identify reusable patterns vs. unique implementations
- Detect interactive elements requiring JavaScript
Technical Extraction
- Colors: Extract hex codes, identify primary/secondary/accent colors
- Typography: Font families, sizes, weights, line-heights
- Spacing: Margins, padding, gaps (in px, rem, or relative units)
- Layout: Grid systems, flexbox patterns, column structures
- Breakpoints: Responsive design requirements
- Interactions: Hover states, animations, transitions
Analysis Process
0. Fetch Design Data (CRITICAL FIRST STEP)
Before any analysis, you MUST fetch the actual design data:
For Figma URLs:
STEP 1: Load Figma MCP Tools
Use ToolSearch to load Figma tools FIRST:
ToolSearch(query: "select:mcp__plugin_figma_figma__get_design_context")
ToolSearch(query: "select:mcp__plugin_figma_figma__get_screenshot")
STEP 2: Parse Figma URL
URL format: https://figma.com/design/{fileKey}?node-id={nodeId}
Example: https://figma.com/design/ABC123XYZ?node-id=16981-81661
Extract:
- fileKey: "ABC123XYZ"
- nodeId: "16981:81661" (IMPORTANT: Replace hyphen with colon!)
STEP 3: Fetch Design Context
Call Figma MCP to get design structure and code:
mcp__plugin_figma_figma__get_design_context(
fileKey: {extracted fileKey},
nodeId: {extracted nodeId with colon},
clientLanguages: "html,css,scss",
clientFrameworks: "wordpress" | "drupal"
)
Returns:
- React/Tailwind code (will need conversion to native WordPress/Drupal)
- Exact CSS values (colors, spacing, typography from Figma)
- Image asset URLs (valid for 7 days)
- Design token information
STEP 4: Get Visual Screenshot
Call Figma MCP to get visual reference:
mcp__plugin_figma_figma__get_screenshot(
fileKey: {same fileKey},
nodeId: {same nodeId with colon},
clientLanguages: "html,css,scss",
clientFrameworks: "wordpress" | "drupal"
)
Returns: Visual image for analysis
STEP 5: Extract Design Specifications
From the Figma data, extract:
- Colors: Exact hex codes from CSS values in code output
- Typography: Font families, sizes (px), weights, line-heights from code
- Spacing: Margins, padding, gaps from Tailwind classes or CSS
- Layout: Flexbox, grid, positioning from class names
- Images: Download URLs for all assets (imgVariable = "https://...")
- Dimensions: Width, height, border-radius values
- Effects: Shadows, gradients, opacity
STEP 6: Download Image Assets Locally
# Create directory for pattern/paragraph assets
mkdir -p {theme-path}/assets/images/patterns
# Download each image asset
cd {theme-path}/assets/images/patterns
curl -o {descriptive-filename}.png "{figma-asset-url}"
curl -o {descriptive-filename-2}.jpg "{figma-asset-url-2}"
Update code references to use local paths:
OLD: src="https://www.figma.com/api/mcp/asset/..."
NEW: src="<?php echo esc_url( get_template_directory_uri() . '/assets/images/patterns/{filename}.png' ); ?>"
For Screenshot/Image Files:
STEP 1: Read Image File
Use Read tool to load the image:
Read(file_path: {screenshot-path})
STEP 2: Visual Analysis
Analyze the image visually:
- Identify layout structure
- Estimate colors (use hex color picker if available)
- Measure relative spacing and proportions
- Identify typography styles
- Note component hierarchy
DO NOT PROCEED until you have:
- ✅ Fetched Figma design (if Figma URL) OR loaded screenshot
- ✅ Extracted exact design values (colors, typography, spacing)
- ✅ Downloaded all image assets to local paths
- ✅ Have visual reference for comparison
1. Initial Assessment
Ask clarifying questions:
What type of component is this?
- WordPress block pattern?
- Drupal paragraph type?
- Custom theme component?
What's the primary purpose?
- Hero section?
- Content display?
- Interactive element?
- Navigation?
2. Visual Hierarchy Analysis
Examine and document:
Layout Structure:
- Sections and their relationships
- Container widths (full-width, contained, etc.)
- Visual hierarchy (what's most prominent)
Content Elements:
- Headings (identify h1, h2, h3 levels)
- Body text and captions
- Images and media placement
- Buttons and CTAs
- Icons and decorative elements
3. Component Mapping
For WordPress:
Map to Core Blocks:
- Group: Container/wrapper
- Cover: Full-width sections with background images
- Heading: H1-H6 headings
- Paragraph: Body text
- Buttons/Button: CTAs
- Image: Individual images
- Gallery: Image collections
- Columns/Column: Multi-column layouts
- Spacer: Vertical spacing
- Separator: Dividers
For Drupal:
Map to Paragraph Fields:
- Text (plain): Short text fields
- Text (formatted, long): Body/description fields
- Link: CTA buttons, navigation
- Entity reference (Media): Images, videos
- Boolean: Toggle features
- List (text): Select options
- Entity reference (Taxonomy): Categories/tags
4. Responsive Behavior Planning
Determine how layout changes:
Mobile (320px-767px):
- Single column layouts
- Stacked elements
- Larger touch targets
- Simplified navigation
Tablet (768px-1023px):
- 2-column layouts where appropriate
- Adjusted typography
- Moderate spacing
Desktop (1024px+):
- Multi-column layouts
- Full typography scale
- Maximum spacing
- Hover states prominent
5. Styling Requirements
Extract specific values:
Colors:
primary: #HEXCODE
secondary: #HEXCODE
text: #HEXCODE
background: #HEXCODE
Typography:
heading-1: [size]px / [line-height] / [weight]
heading-2: [size]px / [line-height] / [weight]
body: [size]px / [line-height] / [weight]
Spacing:
section-padding: [value]
element-margin: [value]
gap: [value]
6. Accessibility Requirements
Identify needs:
Semantic Structure:
- Proper heading hierarchy
- Landmark regions
- Form labels
- Button text
ARIA Needs:
- Labels for icon-only buttons
- Descriptions for complex widgets
- Live regions for dynamic content
- Hidden content for screen readers
Contrast:
- Check all text against backgrounds
- Verify minimum 4.5:1 for body text
- Verify minimum 3:1 for large text/UI
7. Interactive Elements
Document behavior:
For each interactive element:
- What triggers it (click, hover, focus)
- What changes (visual, content, navigation)
- Animation/transition details
- Keyboard interaction requirements
- Accessible alternatives
Output Format
When analysis is complete, provide structured output:
component_analysis:
type: "block_pattern" | "paragraph_type" | "theme_component"
name: "descriptive-name"
cms: "wordpress" | "drupal"
structure:
sections:
- name: "hero"
elements:
- type: "heading"
level: "h1"
content: "Main Heading Text"
- type: "paragraph"
content: "Supporting text"
- type: "button"
style: "primary"
text: "Call to Action"
wordpress_blocks:
- "core/cover"
- "core/heading"
- "core/paragraph"
- "core/buttons"
drupal_fields:
- name: "field_heading"
type: "string"
cardinality: 1
- name: "field_body"
type: "text_long"
cardinality: 1
- name: "field_cta"
type: "link"
cardinality: 1
styling:
colors:
primary: "#0073aa"
secondary: "#23282d"
text: "#1e1e1e"
background: "#ffffff"
typography:
heading_1:
mobile: "2rem / 1.2 / 700"
tablet: "2.5rem / 1.2 / 700"
desktop: "3rem / 1.2 / 700"
body:
mobile: "1rem / 1.6 / 400"
tablet: "1.125rem / 1.6 / 400"
desktop: "1.25rem / 1.6 / 400"
spacing:
section_padding:
mobile: "2rem"
tablet: "3rem"
desktop: "4rem"
element_gap: "1.5rem"
layout:
max_width: "1200px"
columns:
mobile: 1
tablet: 2
desktop: 3
responsive:
breakpoints:
mobile: "320px"
tablet: "768px"
desktop: "1024px"
behavior:
- "Stack columns on mobile"
- "Reduce heading sizes"
- "Adjust padding/margins"
interactions:
- element: "CTA button"
trigger: "hover"
effect: "background color change"
css: "transition: background-color 0.3s ease"
- element: "Image"
trigger: "click"
effect: "Open lightbox"
requires: "JavaScript"
accessibility:
requirements:
- "Heading hierarchy: h1 → h2"
- "Alt text for hero image"
- "Button has descriptive text"
- "Color contrast: all text 4.5:1 or better"
- "Focus indicators on interactive elements"
concerns:
- "Icon-only button needs aria-label"
- "Decorative image should have empty alt"
implementation_notes:
- "Use CSS Grid for desktop 3-column layout"
- "Background image should be lazy-loaded"
- "Consider reduced motion preferences"
- "Test with keyboard navigation"
Integration with Commands
This skill provides critical context for:
/design-to-block Command
Provides:
- WordPress block selections
- Pattern structure
- Styling specifications
- Accessibility requirements
/design-to-paragraph Command
Provides:
- Drupal field types and configuration
- Twig template structure
- CSS requirements
- Interactive behavior specs
/design-validate Command
Provides:
- Design comparison reference
- Expected behavior documentation
- Accessibility requirements to check
Example Activation
Example 1: Figma URL
User provides Figma URL:
"Create a WordPress block pattern from this Figma design: https://figma.com/design/ABC123?node-id=100-200"
Skill Response:
I'll fetch and analyze this Figma design for WordPress implementation.
[Step 1: Load Figma tools with ToolSearch]
[Step 2: Parse URL - fileKey: ABC123, nodeId: 100:200]
[Step 3: Call mcp__plugin_figma_figma__get_design_context]
[Step 4: Call mcp__plugin_figma_figma__get_screenshot]
[Step 5: Extract design specifications from Figma data]
[Step 6: Download image assets locally]
Design Analysis Complete:
- Type: Hero section with overlaid text
- Fetched from Figma: node-id=100:200
- WordPress Blocks Needed: Cover, Heading, Paragraph, Buttons
- Layout: Full-width (1200px max-width), centered content
- Colors (from Figma):
- Background overlay: #000000 (40% opacity)
- Text: #FFFFFF
- Button: #0073AA
- Button hover: #005A87
- Typography (from Figma):
- Heading: Montserrat Bold, 48px/1.2, desktop → 32px mobile
- Body: Inter Regular, 18px/1.6
- Spacing (from Figma):
- Section padding: 120px vertical, 40px horizontal
- Element gap: 24px
- Images (downloaded):
- Hero background: /assets/images/patterns/hero-bg.jpg
- Responsive: Text scales down, padding reduces on mobile
- Accessibility:
- Text contrast 7:1 (exceeds WCAG AA)
- Need alt text for background image
Ready to generate the block pattern with exact Figma specifications.
Example 2: Screenshot
User uploads image and says:
"Create a WordPress block pattern from this hero design"
Skill Response:
I'll analyze this design for WordPress implementation.
[Step 1: Read image file]
[Step 2: Perform visual analysis]
Design Analysis Complete:
- Type: Hero section with overlaid text
- WordPress Blocks Needed: Cover, Heading, Paragraph, Buttons
- Layout: Full-width background image with centered content
- Colors (estimated from screenshot):
- Dark overlay: ~#000000 (40% opacity)
- Text: white
- Typography (estimated):
- Heading: ~3rem on desktop, ~2rem mobile
- Body: ~1.125rem
- Responsive: Text size reduces, padding adjusts
- Accessibility: Need alt text for background image, ensure text contrast
Note: Values estimated from screenshot. For exact specifications, provide Figma URL.
Ready to generate the block pattern. Shall I proceed?
Best Practices
- ALWAYS Fetch Design Data First: Never analyze without fetching actual design using Figma MCP or Read tool
- Use Exact Values from Figma: When Figma URL provided, use exact px/rem values from Figma data, not estimates
- Download Assets Locally: Never reference Figma CDN URLs in production code - download to theme/module
- Ask Before Assuming: If design intent is unclear, ask the user
- Be Specific: Provide exact values (px, rem, hex codes)
- Think Mobile-First: Always consider mobile layout first
- Check Accessibility: Flag potential issues early
- Document Interactions: Don't overlook hover states and animations
- Map to Native Components: Prefer platform-native solutions
Common Patterns Recognition
Learn to quickly identify these patterns:
- Hero: Full-width section, background image, overlaid text, CTA
- Card Grid: Repeating items, image + text, equal heights
- CTA Banner: Contrasting background, centered text, prominent button
- Testimonial: Quote, author info, possibly image
- Slideshow: Multiple items, navigation arrows, pagination dots
- Feature List: Icons, headings, descriptions, grid/list layout
- Team Grid: Photos, names, titles, bio text
For each pattern, know the typical WordPress blocks or Drupal fields needed.
Source
git clone https://github.com/kanopi/cms-cultivator/blob/main/skills/design-analyzer/SKILL.mdView on GitHub Overview
Design Analyzer fetches design data (Figma links, screenshots, or mockups) and extracts exact technical requirements. It maps colors, typography, spacing, and layout to WordPress blocks or Drupal paragraph fields, delivering precise values, responsive behavior, and accessibility notes for developers.
How This Skill Works
It first fetches the design data using available tools (Figma MCP, Read tool) before analysis. It then analyzes tokens and visual metrics to produce exact values for colors, typography, spacing, and layout, checks accessibility requirements, and outputs platform-ready mappings (Block patterns or Paragraph types) with responsive behavior.
When to Use It
- When a user provides a Figma URL or design reference and wants a CMS implementation plan
- When a user uploads an image or screenshot and needs exact specs extracted
- When a user asks to convert a design into WordPress blocks or Drupal paragraphs
- When validating spacing, typography, and color consistency across components
- When preparing accessibility and responsive details for developers
Quick Start
- Step 1: Provide a design reference (Figma URL or image) and request analysis
- Step 2: The tool fetches the design data, then extracts colors, typography, spacing, and layout
- Step 3: Review the CMS-ready output (blocks/paragraphs, exact values, responsive rules, and accessibility notes)
Best Practices
- Always fetch the design data first (never guess) using Figma MCP or Read tool
- Extract exact values for colors, typography, spacing, and layout with units
- Check contrast ratios and touch targets (≥ 44x44px) for accessibility
- Define mobile-first breakpoints and responsive behavior from the design
- Document decisions with precise values and mapping to CMS structures
Example Use Cases
- Translate a Figma hero section into WordPress: Group wrapper, Heading, Paragraph, Button, and Image with exact spacing and font sizes
- Convert a product grid mockup into Drupal paragraphs: image fields, text fields, and link fields with consistent gaps
- Extract typography scale (font families, sizes, weights, line heights) from a brand design and apply to CSS tokens
- Audit a wireframe for contrast and touch targets, proposing fixes for accessible color choices and larger buttons
- Map a responsive card grid to a WordPress block pattern with breakpoints for mobile, tablet, and desktop