content-experimentatio…
Content experimentation and A/B testing guidance covering experiment design, hypotheses, metrics, sample size, statistical…
Convert HTML and Markdown content into Portable Text blocks for Sanity. Use when migrating content from legacy CMSs, importing HTML or Markdown into Sanity, building content pipelines that ingest external content, converting rich text between formats, or programmatically
Claude Code
$ npx -y skills add sanity-io/agent-toolkit --skill portable-text-conversion --agent claude-code
Codex
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a codex -y
Cursor
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a cursor -y
Gemini CLI
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a gemini-cli -y
GitHub Copilot
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a github-copilot -y
OpenCode
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a opencode -y
Windsurf
$ npx skills add sanity-io/agent-toolkit --skill portable-text-conversion -a windsurf -y
name: portable-text-conversion description: Convert HTML and Markdown content into Portable Text blocks for Sanity. Use when migrating content from legacy CMSs, importing HTML or Markdown into Sanity, building content pipelines that ingest external content, converting rich text between formats, or programmatically creating Portable Text documents. Covers @portabletext/markdown (markdownToPortableText), @portabletext/block-tools (htmlToBlocks), custom deserializers, and the Portable Text specification for manual block construction. license: MIT metadata: author: sanity version: "1.0.0"
Convert external content (HTML, Markdown) into Portable Text for Sanity. Three main approaches:
1. **`markdownToPortableText`** — Convert Markdown directly using `@portabletext/markdown` (recommended for Markdown) 2. **`htmlToBlocks`** — Parse HTML into PT blocks using `@portabletext/block-tools` (for HTML migration) 3. **Manual construction** — Build PT blocks directly from any source (APIs, databases, etc.)
Understand the target format before converting. PT is an array of blocks:
[
{
"_type": "block",
"_key": "abc123",
"style": "normal",
"children": [
{"_type": "span", "_key": "def456", "text": "Hello ", "marks": []},
{"_type": "span", "_key": "ghi789", "text": "world", "marks": ["strong"]}
],
"markDefs": []
},
{
"_type": "block",
"_key": "jkl012",
"style": "h2",
"children": [
{"_type": "span", "_key": "mno345", "text": "A heading", "marks": []}
],
"markDefs": []
},
{
"_type": "image",
"_key": "pqr678",
"asset": {"_type": "reference", "_ref": "image-abc-200x200-png"}
}
]**Key rules:**
Read the rule file matching your source format:
> **Note:** `@sanity/block-tools` is the legacy package name. Always use `@portabletext/block-tools` for new projects. The API is the same.
Content experimentation and A/B testing guidance covering experiment design, hypotheses, metrics, sample size, statistical…
Structured content modeling guidance for schema design, content architecture, content reuse, references versus embedded objects,…
Render and serialize Portable Text to React, Svelte, Vue, Astro, HTML, Markdown, and plain text. Use when implementing Portable…
Sanity development best practices for schema design, GROQ queries, TypeGen, Visual Editing, images, Portable Text, Studio…
Fix a Sanity Studio custom form component (components.input, components.field, components.item, or a plugin's form.components)…
Plans, implements, and reviews migrations from other CMSes and content systems into Sanity. Use when migrating or replatforming…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.