Skip to content
Content
Skill

/html-to-breakdance

Use when the user says 'convert this html to breakdance' or 'paste html into breakdance', or has a Webflow, Framer, CodePen, or old static export to bring into a Breakdance site. Converts raw HTML and CSS into native EssentialElements nodes in _breakdance_data, mapping colors,

From plugin
respira-wordpress-skills
5155 skills

Claude Code

$ npx -y skills add respira-press/agent-skills-wordpress --skill html-to-breakdance --agent claude-code

SKILL.md

html-to-breakdance.SKILL.md
name: html-to-breakdance
description: "Use when the user says 'convert this html to breakdance' or 'paste html into breakdance', or has a Webflow, Framer, CodePen, or old static export to bring into a Breakdance site. Converts raw HTML and CSS into native EssentialElements nodes in _breakdance_data, mapping colors, type, and spacing to Breakdance Variables, and refusing element types Breakdance would skip-render."
license: MIT
metadata:
  author: Respira for WordPress
  author_url: https://respira.press
  version: 1.2.0
  mcp-server: respira-wordpress
  category: migration

HTML to Breakdance

**Version:** 1.2.0 **Updated:** 2026-10-04 **Category:** migration **Status:** stable **Requires:** Respira for WordPress plugin 8.6.32+ + Breakdance active + MCP server

---

Description

Convert raw HTML/CSS, pasted from a design export, a Figma extraction, a landing page on another platform, or your own prototype, into native Breakdance elements. Not a screenshot-to-builder pass. This is a structural conversion into the `EssentialElements\*` tree Breakdance's own renderer reads, with the site's Breakdance Variables reused instead of inlined values.

Uses the existing `respira_convert_html_to_builder` MCP tool with a Breakdance-specific workflow layered on top. The Breakdance layer matters because Breakdance stores nothing in `post_content`: the page lives entirely in the `_breakdance_data` post meta, and three of the five ways this conversion can go wrong are invisible unless you check the meta and the public render separately.

---

What Breakdance actually stores

Read this before the workflow. Every step below depends on it.

| Fact | Detail | |---|---| | Storage key | `_breakdance_data` post meta, JSON. `post_content` stays empty | | Envelope | `tree_json_string` (the tree as a stringified JSON) plus a `tree` sibling carrying `root`, `_nextNodeId` and `status`. Both the PHP tree gate and the editor's io-ts decoder need that exact shape | | Node shape (native) | `{ id, data: { type, properties: { content, design } }, children: [...] }` | | Node shape (what you send) | `{ type, attributes: { content, design }, children: [] }`. The attributes bucket is `content` + `design`, never `settings` | | Element type naming | Fully qualified class names: `EssentialElements\Section`, `EssentialElements\Heading`, `EssentialElements\Text`, `EssentialElements\RichText`, `EssentialElements\Button`, `EssentialElements\Image`, `EssentialElements\Video`, `EssentialElements\Divider`, `EssentialElements\Columns`, `EssentialElements\Column`, `EssentialElements\Div`, `EssentialElements\Grid`, `EssentialElements\CodeBlock` | | Content path | Values live at `properties.content.content.<field>`. `content` is the tab, `content.content` is the section inside it. A heading is `content.content.text` plus `content.content.tags` (`h1`..`h6`); a text node is `content.content.text` | | Styling path | `design.*`, for example `design.typography.align`. Design values never go in the content bag | | Children | Genuinely nested. Each node carries its own `children` array. No flat map, no parent refs (that is Bricks) | | Node IDs | Numeric, auto-assigned by the adapter with a floor of 100 (root is id 1). `_nextNodeId` is kept in sync on write. Do not invent IDs | | Render gate | `_breakdance_dependency_cache`, written by Breakdance's own save pipeline. Respira regenerates it best-effort via `\Breakdance\Render\generateCacheForPost`. Without it a perfectly valid tree renders nothing on the front end while the editor looks fine | | Variables | Breakdance Variables (Color, Typography, Spacing) live in the `breakdance_global_settings` option, not in the page |

Lowercase generic types (`heading`, `text`, `section`) are not Breakdance types. A page written with them persists and reports success, and Breakdance skip-renders every node. That was a real report against v6.9.1. The converter maps generics to the `EssentialElements\*` classes for you, which is exactly why you should convert through the tool rather than hand-assembling a tree.

---

When to Use

  • A designer hands you HTML/CSS from a Webflow export, a Framer export, or a CodePen
  • You are rebuilding a landing page you have the rights to and want to start from its structure
  • You have an old static HTML page you want to bring into a live Breakdance site
  • You are prototyping a section in HTML and want to land it in Breakdance for further editing

---

Trigger Phrases

  • "convert this html to breakdance"
  • "import this design into breakdance"
  • "paste html into breakdance"
  • "html to breakdance"
  • "turn this html into a breakdance page"
  • "bring this codepen into breakdance"

---

Execution Workflow

Step 1: Verify Breakdance is active

Call `respira_get_builder_info`. If the active builder is NOT Breakdance, stop and tell the user: *"This skill targets Breakdance. Your active builder is {X}. Use the generic `convert html to builder` workflow instead, or switch the active builder."*

If Breakdance is active, capture its version, and note whether the site runs themeless mode (Breakdance replacing the theme). Themeless changes what page chrome the converted page inherits, so it belongs in the report.

Oxygen 6 is a separate skill target even though its adapter extends this one. If the site is Oxygen 6, its types are `OxygenElements\*` and this skill does not apply.

Step 2: Confirm site + target page

Call `respira_get_active_site`. Ask:

  • *"Convert the HTML into a new page (I'll create it), or into an existing page (you tell me which)?"*
  • If existing: confirm the page ID and say plainly that a SafeEdit duplicate gets created first.

Step 3: Pull the design direction if present

Call `respira_get_design_direction`. If a direction is ACTIVE, capture its color roles, typography, and spacing tokens from `document.tokens`: the conversion maps raw CSS values (`#2563EB`) onto those tokens (`accent`) so the converted page is drift-resistant. Treat th

Read more
@respira-press
Ships withrespira-wordpress-skills

The community hub for WordPress AI workflows. Skills that run inside Claude Code, Codex, Antigravity, Cursor, and any AI agent that supports Skills + MCP to analyze, audit, optimize, and fix WordPress sites. Built by the community. Curated by Respira.

Stars on GitHub

Momentum

stars in total
51
Star history of respira-press/agent-skills-wordpress on GitHub, a chart by star-history.com

Other skills on respira-wordpress-skills.

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli12d33k
@iofficeai@iofficeaiInstall Skill

Questions about html-to-breakdance.

Which coding agents can use html-to-breakdance?
html-to-breakdance installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.