К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

react-email — скилл для Claude Code: рендер JSON-писем

Преобразует JSON-спецификации в HTML- и текстовые письма через React Email. Нужен для каталогов писем, шаблонов и описаний, созданных ИИ.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add vercel-labs/json-render --skill react-email -a claude-code
Открыть на GitHub

Что делает react-email

Скилл работает с @json-render/react-email: берёт плоское дерево с root и elements, где корневой элемент должен быть Html, и рендерит письмо через renderToHtml или renderToPlainText. Внутри Html нужны Head и Body.

Для разметки доступны Container, Section, Row, Column, Heading, Text, Link, Button, Image и другие компоненты. Каталог расширяется своими компонентами через defineCatalog и defineRegistry; для серверного рендера им передаётся реестр. Условия видимости, $state, $cond и повторы получают состояние из параметров рендера.

Стили нужно задавать прямо в компонентах, потому что многие почтовые клиенты удаляют блоки <style>. Это ограничение стоит проверить до переноса существующего шаблона с внешним CSS. Для импорта схемы и каталога без React есть путь @json-render/react-email/server.

Какие задачи решает

  • превратить JSON-спецификацию в HTML-письмо
  • получить текстовую версию письма
  • добавить пользовательский компонент в каталог
  • отрендерить условия и повторы с состоянием
  • собрать табличную раскладку для почтовых клиентов

Примеры запросов агенту

  • Собери HTML-письмо из JSON-спецификации через `@json-render/react-email`.
  • Добавь компонент `Alert` в каталог и передай реестр в `renderToHtml`.
  • Отрендери это письмо в текстовый формат с `renderToPlainText`.

Как установить react-email

1Через Skills CLI (Vercel)

npx skills add vercel-labs/json-render --skill react-email -a claude-code

2Вручную: положить файлы

~/.claude/skills/react-email/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/react-email/

Из того же набора20

Весь набор →
react vercel-labs Скилл помогает собирать React-интерфейсы из JSON-спецификаций через json-render. Нужен для каталогов компонентов и UI, который создаёт ИИ. Claude Code CX Codex Cursor +1 16 300установок core vercel-labs Описывает схему и каталог компонентов для json-render и собирает системный промпт, по которому ИИ выдаёт JSON-спеки интерфейсов. Claude Code CX Codex Cursor +1 15 000установок codegen vercel-labs Утилиты для генерации кода из json-render UI-деревьев. Помогает строить кастомные экспортеры кода для Next.js, Remix и других фреймворков, обходить спеки и сериализовать пропсы. Claude Code CX Codex Cursor +1 8 900установок next vercel-labs Генерирует многостраничные приложения Next.js из спецификаций JSON. Пригодится при сборке SSR-сайтов, маршрутов и макетов через @json-render/next. Claude Code CX Codex Cursor +1 8 600установок devtools vercel-labs Панель отладки для json-render: дерево компонентов, редактор состояния, лог действий, стриминг патчей и пикер элементов. Claude Code CX Codex Cursor +1 8 300установок directives vercel-labs Готовые директивы для json-render: форматирование, математика, строки, i18n. Подключаются в каталог и рендерер за пару строк. Claude Code CX Codex Cursor +1 8 000установок mcp vercel-labs Скилл помогает собирать MCP-серверы с интерактивными json-render UI для Claude, ChatGPT, Cursor и VS Code. Claude Code CX Codex Cursor +1 5 800установок react-native vercel-labs Скилл помогает собирать нативные React Native-интерфейсы из JSON-спецификаций. Пригодится для мобильных UI с состоянием, условиями видимости и действиями. Claude Code CX Codex Cursor +1 3 200установок

Похожие

game-object-components phaserjs Справочник по компонентам и миксинам игровых объектов в Phaser 4. Помогает агенту настраивать Transform, Depth и WebGL-эффекты. Claude Code CX Codex Cursor +1 796установок control-ui cursor Скилл подключает локальную автоматизацию браузера или CDP для проверки интерфейсов веб-приложений и Electron. Помогает собирать скриншоты и профили производительности. Claude Code CX Codex Cursor +1 2 400установок time-and-timers phaserjs Помогает настраивать таймеры, задержки и последовательности Timeline в Phaser 4. Пригодится при создании игровых циклов и анимаций. Claude Code CX Codex Cursor +1 786установок image-to-ui UIZZE Превратите скриншот, макет или эскиз в рабочий код интерфейса. Скилл смотрит на изображение, воспроизводит его точно в коде, затем рендерит и сравнивает, чтобы исправить различия. Claude Code CX Codex Cursor +1 63 500установок userinterface-wiki raphael-salaja Справочник из 152 правил UI/UX для веб-интерфейсов. Скилл проверяет анимации, типографику, аудиофидбэк и паттерны UX, выдаёт ошибки с привязкой к строкам кода. Claude Code CX Codex Cursor +1 4 500установок adaptive Google LLC Настраивает адаптивный интерфейс Android-приложений на Jetpack Compose под телефоны, планшеты, складные устройства и десктоп. Спасёт при переносе экрана на экраны разных размеров. Claude Code CX Codex Cursor +1 2 400установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. Claude Code Claude.ai 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. Claude Code CX Codex Cursor +1 673 100установок

Вопросы о react-email

Как установить react-email в Claude Code?

Выполните npx skills add vercel-labs/json-render --skill react-email -a claude-code. Затем повторите npx skills add vercel-labs/json-render --skill react-email -a claude-code; файл скилла находится в ~/.claude/skills/react-email/SKILL.md.

Что делает react-email?

Скилл помогает работать с @json-render/react-email, который преобразует JSON-спецификации писем в HTML или текстовый вывод. Он использует компоненты React Email и поддерживает собственные каталоги компонентов.

Как импортировать схему без React и `@react-email/components`?

Используйте @json-render/react-email/server. Этот путь даёт доступ к схеме и определениям стандартных компонентов без импорта React и @react-email/components.

Исходный текст

SKILL.md · Apache-2.0
---
name: react-email
description: React Email renderer for json-render that turns JSON specs into HTML or plain-text emails using @react-email/components and @react-email/render. Use when working with @json-render/react-email, building transactional or marketing emails from JSON, creating email catalogs, rendering AI-generated email specs, or when the user mentions react-email, HTML email, or transactional email.
metadata:
  tags: react-email, email, json-render, html email, transactional email
---

# @json-render/react-email

React Email renderer that converts JSON specs into HTML or plain-text email output.

## Quick Start

```typescript
import { renderToHtml } from "@json-render/react-email";
import { schema, standardComponentDefinitions } from "@json-render/react-email";
import { defineCatalog } from "@json-render/core";

const catalog = defineCatalog(schema, {
  components: standardComponentDefinitions,
});

const spec = {
  root: "html-1",
  elements: {
    "html-1": { type: "Html", props: { lang: "en", dir: "ltr" }, children: ["head-1", "body-1"] },
    "head-1": { type: "Head", props: {}, children: [] },
    "body-1": {
      type: "Body",
      props: { style: { backgroundColor: "#f6f9fc" } },
      children: ["container-1"],
    },
    "container-1": {
      type: "Container",
      props: { style: { maxWidth: "600px", margin: "0 auto", padding: "20px" } },
      children: ["heading-1", "text-1"],
    },
    "heading-1": { type: "Heading", props: { text: "Welcome" }, children: [] },
    "text-1": { type: "Text", props: { text: "Thanks for signing up." }, children: [] },
  },
};

const html = await renderToHtml(spec);
```

## Spec Structure (Element Tree)

Same flat element tree as `@json-render/react`: `root` key plus `elements` map. Root must be `Html`; children of `Html` should be `Head` and `Body`. Use `Container` (e.g. max-width 600px) inside `Body` for client-safe layout.

## Creating a Catalog and Registry

```typescript
import { defineCatalog } from "@json-render/core";
import { schema, defineRegistry, renderToHtml } from "@json-render/react-email";
import { standardComponentDefinitions } from "@json-render/react-email/catalog";
import { Container, Heading, Text } from "@react-email/components";
import { z } from "zod";

const catalog = defineCatalog(schema, {
  components: {
    ...standardComponentDefinitions,
    Alert: {
      props: z.object({
        message: z.string(),
        variant: z.enum(["info", "success", "warning"]).nullable(),
      }),
      slots: [],
      description: "A highlighted message block",
    },
  },
  actions: {},
});

const { registry } = defineRegistry(catalog, {
  components: {
    Alert: ({ props }) => (
      <Container style={{ padding: 16, backgroundColor: "#eff6ff", borderRadius: 8 }}>
        <Text style={{ margin: 0 }}>{props.message}</Text>
      </Container>
    ),
  },
});

const html = await renderToHtml(spec, { registry });
```

## Server-Side Render APIs

| Function | Purpose |
|----------|---------|
| `renderToHtml(spec, options?)` | Render spec to HTML email string |
| `renderToPlainText(spec, options?)` | Render spec to plain-text email string |

`RenderOptions`: `registry`, `includeStandard` (default true), `state` (for `$state` / `$cond`).

## Visibility and State

Supports `visible` conditions, `$state`, `$cond`, repeat (`repeat.statePath`), nested repeat paths with `{ "$item": "field" }`, and the same expression syntax as `@json-render/react`. Use `state` in `RenderOptions` when rendering server-side so expressions resolve.

## Server-Safe Import

Import schema and catalog without React or `@react-email/components`:

```typescript
import { schema, standardComponentDefinitions } from "@json-render/react-email/server";
```

## Key Exports

| Export | Purpose |
|--------|---------|
| `defineRegistry` | Create type-safe component registry from catalog |
| `Renderer` | Render spec in browser (e.g. preview); use with `JSONUIProvider` for state/actions |
| `createRenderer` | Standalone renderer component with state/actions/validation |
| `renderToHtml` | Server: spec to HTML string |
| `renderToPlainText` | Server: spec to plain-text string |
| `schema` | Email element schema |
| `standardComponents` | Pre-built component implementations |
| `standardComponentDefinitions` | Catalog definitions (Zod props) |

## Sub-path Exports

| Path | Purpose |
|------|---------|
| `@json-render/react-email` | Full package |
| `@json-render/react-email/server` | Schema and catalog only (no React) |
| `@json-render/react-email/catalog` | Standard component definitions and types |
| `@json-render/react-email/render` | Render functions only |

## Standard Components

All components accept a `style` prop (object) for inline styles. Use inline styles for email client compatibility; avoid external CSS.

### Document structure

| Component | Description |
|-----------|-------------|
| `Html` | Root wrapper (lang, dir). Children: Head, Body. |
| `Head` | Email head section. |
| `Body` | Body wrapper; use `style` for background. |

### Layout

| Component | Description |
|-----------|-------------|
| `Container` | Constrain width (e.g. max-width 600px). |
| `Section` | Group content; table-based for compatibility. |
| `Row` | Horizontal row. |
| `Column` | Column in a Row; set width via style. |

### Content

| Component | Description |
|-----------|-------------|
| `Heading` | Heading text (as: h1–h6). |
| `Text` | Body text. |
| `Link` | Hyperlink (text, href). |
| `Button` | CTA link styled as button (text, href). |
| `Image` | Image from URL (src, alt, width, height). |
| `Hr` | Horizontal rule. |

### Utility

| Component | Description |
|-----------|-------------|
| `Preview` | Inbox preview text (inside Html). |
| `Markdown` | Markdown content as email-safe HTML. |

## Email Best Practices

- Keep width constrained (e.g. Container max-width 600px).
- Use inline styles or React Email's style props; many clients strip `<style>` blocks.
- Prefer table-based layout (Section, Row, Column) for broad client support.
- Use absolute URLs for images; many clients block relative or cid: references in some contexts.
- Test in multiple clients (Gmail, Outlook, Apple Mail); use a preview tool or Litmus-like service when possible.

© vercel-labs · Apache-2.0 · vercel-labs/json-render

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой