From Respira WordPress Skills Library
Extracts a complete design system from a WordPress site (colors, typography, spacing, components) and persists it as reusable tokens. Also generates a visible style-guide page on the site.
How this skill is triggered — by the user, by Claude, or both
Slash command
/respira-wordpress-skills:design-system-synthesizerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Version:** 1.1.0
Version: 1.1.0 Updated: 2026-05-24 Freshly updated: v1.1.0 adds Step 9 — generates a visible style-guide page inside the user's WordPress site (private draft by default, optional public publish). Renders the synthesized tokens visually: color swatches with hex codes, typography samples in actual styles, spacing scale blocks, component previews. Page is built with the active builder so it's editable in the user's normal workflow. Solves the "where do I see the design system" question — it's a page, not JSON. Category: intelligence Status: stable Requires: Respira for WordPress plugin 7.1+ + MCP server
Read a WordPress site's representative pages, theme files, and media library to extract a complete, reusable design system — logo, color palette, typography, spacing scale, component patterns. Persist it to the site so every future content-creation skill references it, and every new page Claude builds matches the existing brand.
This is the foundation for on-brand AI-generated content. Without a design system, the agent guesses at colors, fonts, and spacing — and the result looks like every other AI-generated WordPress page. With a design system, the agent has explicit tokens to use, and new pages snap to the brand.
A structured design_system artifact stored at the site level. Schema:
{
"version": "1.0.0",
"synthesized_at": "2026-05-24T14:30:00Z",
"synthesized_from": ["/", "/about/", "/services/web-design/", "/blog/sample-post/", "/contact/"],
"brand": {
"logo_url": "https://example.com/wp-content/uploads/2025/logo.svg",
"logo_dark_url": null,
"favicon_url": "https://example.com/favicon.ico",
"social_card_url": "https://example.com/wp-content/uploads/2025/og-default.jpg",
"wordmark_text": "Acme Studio"
},
"colors": {
"primary": "#2563EB",
"secondary": "#0F172A",
"accent": "#F59E0B",
"neutral_900": "#0F172A",
"neutral_700": "#334155",
"neutral_500": "#64748B",
"neutral_300": "#CBD5E1",
"neutral_100": "#F1F5F9",
"background": "#FFFFFF",
"background_alt": "#F8FAFC",
"text_primary": "#0F172A",
"text_secondary": "#475569",
"link": "#2563EB",
"success": "#10B981",
"warning": "#F59E0B",
"error": "#EF4444"
},
"typography": {
"heading_family": "Söhne, ui-sans-serif, system-ui, sans-serif",
"heading_weight": 700,
"h1_size": "3.5rem",
"h2_size": "2.5rem",
"h3_size": "1.875rem",
"h4_size": "1.5rem",
"h5_size": "1.25rem",
"h6_size": "1rem",
"body_family": "Söhne, ui-sans-serif, system-ui, sans-serif",
"body_weight": 400,
"body_size": "1rem",
"body_line_height": 1.65,
"mono_family": "JetBrains Mono, ui-monospace, monospace",
"letter_spacing_heading": "-0.02em",
"letter_spacing_body": "0"
},
"spacing": {
"scale_base": 4,
"scale_steps": [4, 8, 12, 16, 24, 32, 48, 64, 96, 128],
"section_padding_y": "96px",
"section_padding_x": "24px",
"container_max_width": "1280px"
},
"components": {
"button_primary": {
"background": "primary",
"color": "#FFFFFF",
"padding": "12px 24px",
"border_radius": "8px",
"font_weight": 600
},
"button_secondary": { /* ... */ },
"card": {
"background": "background",
"border": "1px solid neutral_300",
"border_radius": "12px",
"padding": "32px",
"shadow": "0 1px 3px rgba(0,0,0,0.05)"
},
"hero_pattern": "centered_with_kicker_h1_subtitle_2cta",
"section_pattern": "wide_two_column_image_left"
},
"voice_hints": {
"person": "we",
"formality": "approachable_professional",
"sentence_length_avg_words": 14,
"avoids": ["exclamation marks", "marketing superlatives"]
}
}
The artifact is stored via respira_update_option('respira_design_system', ...) for v7.1. v7.2 may migrate this to a dedicated respira_intelligence_artifacts table if cross-site rollup is needed.
build_page, page generators) so the new pages match the brandCall respira_get_active_site + respira_get_site_context. Note WordPress version and active theme — theme.json or customizer settings may already expose some tokens.
Call respira_list_pages. From the list, pick 5–10 pages that should represent the brand:
If the site has fewer than 5 pages, use whatever exists. If more than 10, sample by recency and front-page-link weight.
Call respira_list_media filtered for logo-like names (logo, wordmark, brand, favicon). Also check site identity via respira_get_option('site_icon') for the favicon and respira_get_option('custom_logo') for the custom logo URL.
Call respira_read_theme_file('style.css') and respira_read_theme_file('theme.json') if FSE theme. Extract any :root CSS custom properties (often the cleanest source of brand tokens).
For each of the 5–10 picked pages:
respira_extract_builder_content(page_id) — get the builder-native structureAggregate the per-page observations into the structured design_system schema (see "What it produces" above). When multiple pages disagree on a value, prefer:
For colors, identify primary / secondary / accent by frequency-of-use + role (background-of-CTA = primary; link color = link; large-text color = primary if it differs from body). Generate a neutral scale (100 → 900) by sampling backgrounds, borders, text colors.
Output a human-readable summary:
## Design system synthesized for {site_url}
**Brand**
- Logo: 
- Wordmark: {wordmark_text}
**Colors**
- Primary: {primary} ▮
- Secondary: {secondary} ▮
- Accent: {accent} ▮
- Neutrals: {neutral_100} → {neutral_900} (9-step scale)
**Typography**
- Headings: {heading_family} {heading_weight}, H1 {h1_size}
- Body: {body_family} {body_weight}, {body_size}/{body_line_height}
**Spacing**
- Base: {scale_base}px, scale: {scale_steps}
- Section padding: {section_padding_y} vertical, container max {container_max_width}
**Component patterns observed**
- Hero: {hero_pattern}
- Section: {section_pattern}
- Button primary: {button_primary description}
- Card: {card description}
Ask the user to confirm or correct anything.
After confirmation, call respira_update_option('respira_design_system', <json>). Confirm with respira_get_option('respira_design_system').
The JSON in wp_options is the machine source of truth, but it's invisible to humans. Step 9 builds a real WordPress page on the site that renders the synthesized tokens visually — so the user can see their design system, send a link to teammates, and edit it like any other page.
/design-system/ (overridable; check via respira_list_pages and append -2 if conflict)private by default (visible only to logged-in editors). Ask the user: "Publish as private (admin-only preview) or public?" — default to private.respira_get_builder_inline_schemas to confirm available modules before building.Build the page with respira_build_page using this section spine, mapping each section to the active builder's native modules:
Hero
brand.logo_url) prominently displayedBrand identity
brand.social_card_urlbrand.wordmark_textColor palette
Typography
heading_family + heading_weight + their specified sizes, each labeled with the size valuebody_family + body_weight + body_size + body_line_height so the user can SEE the body reading experiencemono_familySpacing scale
scale_steps — a colored rectangle whose height matches the step value, labeled with the pixel valueComponents
Voice hints (if synthesized)
Footer
respira_build_page accepts a section spine and renders it as native builder modules. For each section above, the page builder picks the closest module:
| Section | Bricks | Elementor | Divi 5 | Gutenberg |
|---|---|---|---|---|
| Color swatches | div block grid + heading + text | Inner Section + Heading + Text widgets | Row + Column + Code module | core/columns + core/group blocks |
| Heading samples | heading element ×6 | Heading widget ×6 | Text module ×6 | core/heading blocks ×6 |
| Button samples | button element | Button widget | Button module | core/buttons block |
| Spacing blocks | div block with explicit height | Inner Section with margin | Code module with custom CSS | core/spacer blocks |
Do NOT render with raw HTML even when the builder doesn't have a perfect 1:1 mapping. If a section can't be cleanly built (e.g. the spacing-scale visualization requires inline styles the builder doesn't expose), fall back to a labeled bullet list — never a <div> blob.
After page creation, output:
## ✓ Design system saved + style-guide page created
**Machine source of truth:** `wp_options.respira_design_system` (queryable via `respira_get_option`)
**Human view:** {page_url} · status: private (editors only)
**Open it now:** [{page_title} in the editor]({builder_edit_url})
**Promote to public:** call `respira_update_page(id={page_id}, status='publish')` if you want this visible on your site as a /design-system/ landing.
**Re-sync any time:** run this skill again. Existing data is diffed and the page is regenerated (with the option to keep customizations).
Once persisted, future skills (Page Template Library, Brand Voice Synthesizer, future content-generation skills) should call respira_get_option('respira_design_system') at the top of their workflow. They use the tokens to:
This is the foundation. Every other content skill stands on it.
respira_get_option('respira_design_system') returns existing data, show the user the diff before overwriting.wp_get_attachment_url() semantics, not a relative path.#RRGGBB). Convert rgb(), rgba(), named colors to hex.Records: site URL hash, number of pages sampled, builder active, theme name, colors detected count, typography sources used (theme.json / CSS variables / per-page observation), success/failure, total duration. No actual color values, font names, or logo URLs are sent.
Endpoint: POST https://www.respira.press/api/skills/track-usage
Storage will migrate from wp_options to a dedicated respira_intelligence_artifacts table for cross-site rollups and Studio-tier multi-site dashboards. The schema above is stable — the storage layer change is transparent to consuming skills.
npx claudepluginhub respira-press/agent-skills-wordpressGenerates standalone HTML components and composes them into branded full pages from design systems, with embedded CSS, responsive design, and brand integration. Invoke via /html-page or /html-page-quick.
Creates or extracts DESIGN.md visual design systems from scratch, a URL, or a codebase — documenting tokens, components, and style rules for AI agents to reproduce.
Extracts technical requirements from Figma URLs, images, and mockups. Analyzes colors, typography, spacing, layout, and maps to WordPress blocks or Drupal paragraph fields with accessibility and responsive specs.