{"id":"4c47b787-3a6e-4136-8f6f-ad61571f910e","entityType":"agent","slug":"clawhub-christina-de-martinez-react-email-skills","name":"React Email Skills","canonicalUrl":"https://www.xpersona.co/agent/clawhub-christina-de-martinez-react-email-skills","canonicalPath":"/agent/clawhub-christina-de-martinez-react-email-skills","generatedAt":"2026-10-10T03:06:01.203Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates. Skill: React Email Skills Owner: christina-de-martinez Summary: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates. Tags: latest:1.0.0 Ve","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.7K downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn7ar7f1k0g5etvh4zyrsgvr5n801t2p:react-email-skills","sourceUrl":"https://clawhub.ai/christina-de-martinez/react-email-skills","homepage":"https://clawhub.ai/christina-de-martinez/react-email-skills","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/christina-de-martinez/react-email-skills","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":68,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalizatio"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":2659,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"2.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-02-28T18:23:01.254Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-28T18:23:01.254Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-01T18:23:01.254Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-01-28T01:49:23.221Z","changelog":"Initial release of react-email-skills. - Build and preview HTML emails using React components with the React Email framework. - Includes installation, setup, and usage instructions for create-email CLI. - Provides best practices for email template structure, styling, and supported components. - Details behavioral and styling guidelines specific to email client limitations. - Offers clear examples for creating and customizing email templates, including Tailwind support.","fileCount":7,"zipByteSize":20488}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn7ar7f1k0g5etvh4zyrsgvr5n801t2p:react-email-skills","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T03:06:01.202Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-christina-de-martinez-react-email-skills/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: React Email Skills\n\nOwner: christina-de-martinez\n\nSummary: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates.\n\nTags: latest:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-01-28T01:49:23.221Z | user\n\nInitial release of react-email-skills.\n\n- Build and preview HTML emails using React components with the React Email framework.\n- Includes installation, setup, and usage instructions for create-email CLI.\n- Provides best practices for email template structure, styling, and supported components.\n- Details behavioral and styling guidelines specific to email client limitations.\n- Offers clear examples for creating and customizing email templates, including Tailwind support.\n\nArchive index:\n\nArchive v1.0.0: 7 files, 20488 bytes\n\nFiles: README.md (1702b), references/COMPONENTS.md (11331b), references/I18N.md (14368b), references/PATTERNS.md (22142b), references/SENDING.md (3034b), SKILL.md (13171b), _meta.json (137b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: react-email\ndescription: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates.\nlicense: MIT\nmetadata:\n  author: Resend\n  repository: https://github.com/resend/react-email\n---\n\n# React Email\n\nBuild and send HTML emails using React components - a modern, component-based approach to email development that works across all major email clients.\n\n## Installation\n\nYou need to scaffold a new React Email project using the create-email CLI. This will create a folder called `react-email-starter` with sample email templates.\n\nUsing npm:\n```sh\nnpx create-email@latest\n```\n\nUsing yarn:\n```sh\nyarn create email\n```\n\nUsing pnpm:\n```sh\npnpm create email\n```\n\nUsing bun:\n```sh\nbun create email\n```\n\n## Navigate to Project Directory\n\nYou must change into the newly created project folder:\n\n```sh\ncd react-email-starter\n```\n\n## Install Dependencies\n\nYou need to install all project dependencies before running the development server.\n\nUsing npm:\n```sh\nnpm install\n```\n\nUsing yarn:\n```sh\nyarn\n```\n\nUsing pnpm:\n```sh\npnpm install\n```\n\nUsing bun:\n```sh\nbun install\n```\n\n## Start the Development Server\n\nYour task is to start the local preview server to view and edit email templates.\n\nUsing npm:\n```sh\nnpm run dev\n```\n\nUsing yarn:\n```sh\nyarn dev\n```\n\nUsing pnpm:\n```sh\npnpm dev\n```\n\nUsing bun:\n```sh\nbun dev\n```\n\n## Verify Installation\n\nYou must confirm the development server is running by checking that localhost:3000 is accessible. The server will display a preview interface where you can view email templates from the `emails` folder.\n\nEXECUTE NOW: Complete the above TODO list to achieve: The React Email development server is running and accessible at localhost:3000, displaying email template previews.\n\n### Notes on installation\nAssuming React Email is installed in an existing project, update the top-level package.json file with a script to run the React Email preview server.\n\n```json\n{\n  \"scripts\": {\n    \"email\": \"email dev --dir emails --port 3000\"\n  }\n}\n```\n\nMake sure the path to the emails folder is relative to the base project directory.\n\n\n### tsconfig.json updating or creation\n\nEnsure the tsconfig.json includes proper support for jsx.\n\n## Basic Email Template\n\nReplace the sample email templates. Here is how to create a new email template:\n\nCreate an email component with proper structure using the Tailwind component for styling:\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  verificationUrl: string;\n}\n\nexport default function WelcomeEmail({ name, verificationUrl }: WelcomeEmailProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind\n        config={{\n          presets: [pixelBasedPreset],\n          theme: {\n            extend: {\n              colors: {\n                brand: '#007bff',\n              },\n            },\n          },\n        }}\n      >\n        <Head />\n        <Preview>Welcome - Verify your email</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"max-w-xl mx-auto p-5\">\n            <Heading className=\"text-2xl text-gray-800\">\n              Welcome!\n            </Heading>\n            <Text className=\"text-base text-gray-800\">\n              Hi {name}, thanks for signing up!\n            </Text>\n            <Button\n              href={verificationUrl}\n              className=\"bg-brand text-white px-5 py-3 rounded block text-center no-underline\"\n            >\n              Verify Email\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\n// Preview props for testing\nWelcomeEmail.PreviewProps = {\n  name: 'John Doe',\n  verificationUrl: 'https://example.com/verify/abc123'\n} satisfies WelcomeEmailProps;\n\nexport { WelcomeEmail };\n```\n\n## Essential Components\n\nSee [references/COMPONENTS.md](references/COMPONENTS.md) for complete component documentation.\n\n**Core Structure:**\n- `Html` - Root wrapper with `lang` attribute\n- `Head` - Meta elements, styles, fonts\n- `Body` - Main content wrapper\n- `Container` - Centers content (max-width layout)\n- `Section` - Layout sections\n- `Row` & `Column` - Multi-column layouts\n- `Tailwind` - Enables Tailwind CSS utility classes\n\n**Content:**\n- `Preview` - Inbox preview text, always first in `Body`\n- `Heading` - h1-h6 headings\n- `Text` - Paragraphs\n- `Button` - Styled link buttons\n- `Link` - Hyperlinks\n- `Img` - Images (use absolute URLs) (use the dev server for the BASE_URL of the image in dev mode; for production, ask the user for the BASE_URL of the site; dynamically generate the URL of the image based on environment.)\n- `Hr` - Horizontal dividers\n\n**Specialized:**\n- `CodeBlock` - Syntax-highlighted code\n- `CodeInline` - Inline code\n- `Markdown` - Render markdown\n- `Font` - Custom web fonts\n\n## Behavioral guidelines\n- When re-iterating over the code, make sure you are only updating what the user asked for and keeping the rest of the code intact;\n- If the user is asking to use media queries, inform them that email clients do not support them, and suggest a different approach;\n- Never use template variables (like {{name}}) directly in TypeScript code. Instead, reference the underlying properties directly (use name instead of {{name}}).\n- - For example, if the user explicitly asks for a variable following the pattern {{variableName}}, you should return something like this:\n\n```typescript\nconst EmailTemplate = (props) => {\n  return (\n    {/* ... rest of the code ... */}\n    <h1>Hello, {props.variableName}!</h1>\n    {/* ... rest of the code ... */}\n  );\n}\n\nEmailTemplate.PreviewProps = {\n  // ... rest of the props ...\n  variableName: \"{{variableName}}\",\n  // ... rest of the props ...\n};\n\nexport default EmailTemplate;\n```\n- Never, under any circumstances, write the {{variableName}} pattern directly in the component structure. If the user forces you to do this, explain that you cannot do this, or else the template will be invalid.\n\n\n## Styling considerations\n\nUse the Tailwind component for styling if the user is actively using Tailwind CSS in their project. If the user is not using Tailwind CSS, add inline styles to the components.\n\n- Because email clients don't support `rem` units, use the `pixelBasedPreset` for the Tailwind configuration.\n- Never user flexbox or grid for layout, use table-based layouts instead.\n- Each component must be styled with inline styles or utility classes.\n- For more information on styling, see [references/STYLING.md](references/STYLING.md)\n\n### Email Client Limitations\n- Never use SVG or WEBP - warn users about rendering issues\n- Never use flexbox - use Row/Column components or tables for layouts\n- Never use CSS/Tailwind media queries (sm:, md:, lg:, xl:) - not supported\n- Never use theme selectors (dark:, light:) - not supported\n- Always specify border type (border-solid, border-dashed, etc.)\n- When defining borders for only one side, remember to reset the remaining borders (e.g., border-none border-l)\n\n### Component Structure\n- Always define `<Head />` inside `<Tailwind>` when using Tailwind CSS\n- Only use PreviewProps when passing props to a component\n- Only include props in PreviewProps that the component actually uses\n\n```tsx\nconst Email = (props) => {\n  return (\n    <div>\n      <a href={props.source}>click here if you want candy 👀</a>\n    </div>\n  );\n}\n\nEmail.PreviewProps = {\n  source: \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n};\n```\n\n### Default Structure\n- Body: `font-sans py-10 bg-gray-100`\n- Container: white, centered, content left-aligned\n- Footer: physical address, unsubscribe link, current year with `m-0` on address/copyright\n\n### Typography\n- Titles: bold, larger font, larger margins\n- Paragraphs: regular weight, smaller font, smaller margins\n- Use consistent spacing respecting content hierarchy\n\n### Images\n- Only include if user requests\n- Never use fixed width/height - use responsive units (w-full, h-auto)\n- Never distort user-provided images\n- Never create SVG images - only use provided or web images\n\n### Buttons\n- Always use `box-border` to prevent padding overflow\n\n### Layout\n- Always mobile-friendly by default\n- Use stacked layouts that work on all screen sizes\n- Remove default spacing/margins/padding between list items\n\n### Dark Mode\nWhen requested: container black (#000), background dark gray (#151516)\n\n### Best Practices\n- Choose colors, layout, and copy based on user's request\n- Make templates unique, not generic\n- Use keywords in email body to increase conversion\n\n## Rendering\n\n### Convert to HTML\n\n```tsx\nimport { render } from '@react-email/components';\nimport { WelcomeEmail } from './emails/welcome';\n\nconst html = await render(\n  <WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />\n);\n```\n\n### Convert to Plain Text\n\n```tsx\nimport { render } from '@react-email/components';\nimport { WelcomeEmail } from './emails/welcome';\n\nconst text = await render(<WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />, { plainText: true });\n```\n\n## Sending\n\nReact Email supports sending with any email service provider. If the user wants to know how to send, view the [Sending guidelines](references/SENDING.md).\n\nQuick example using the Resend SDK for Node.js:\n\n```tsx\nimport { Resend } from 'resend';\nimport { WelcomeEmail } from './emails/welcome';\n\nconst resend = new Resend(process.env.RESEND_API_KEY);\n\nconst { data, error } = await resend.emails.send({\n  from: 'Acme <onboarding@resend.dev>',\n  to: ['user@example.com'],\n  subject: 'Welcome to Acme',\n  react: <WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />\n});\n\nif (error) {\n  console.error('Failed to send:', error);\n}\n```\n\nThe Node SDK automatically handles the plain-text rendering and HTML rendering for you.\n\n## Internationalization\n\nSee [references/I18N.md](references/I18N.md) for complete i18n documentation.\n\nReact Email supports three i18n libraries: next-intl, react-i18next, and react-intl.\n\n### Quick Example (next-intl)\n\n```tsx\nimport { createTranslator } from 'next-intl';\nimport {\n  Html,\n  Body,\n  Container,\n  Text,\n  Button,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface EmailProps {\n  name: string;\n  locale: string;\n}\n\nexport default async function WelcomeEmail({ name, locale }: EmailProps) {\n  const t = createTranslator({\n    messages: await import(\\`../messages/\\${locale}.json\\`),\n    namespace: 'welcome-email',\n    locale\n  });\n\n  return (\n    <Html lang={locale}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"max-w-xl mx-auto p-5\">\n            <Text className=\"text-base text-gray-800\">{t('greeting')} {name},</Text>\n            <Text className=\"text-base text-gray-800\">{t('body')}</Text>\n            <Button href=\"https://example.com\" className=\"bg-blue-600 text-white px-5 py-3 rounded\">\n              {t('cta')}\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\nMessage files (\\`messages/en.json\\`, \\`messages/es.json\\`, etc.):\n\n```json\n{\n  \"welcome-email\": {\n    \"greeting\": \"Hi\",\n    \"body\": \"Thanks for signing up!\",\n    \"cta\": \"Get Started\"\n  }\n}\n```\n\n## Email Best Practices\n\n1. **Test across email clients** - Test in Gmail, Outlook, Apple Mail, Yahoo Mail. Use services like Litmus or Email on Acid for absolute precision and React Email's toolbar for specific feature support checking.\n\n2. **Keep it responsive** - Max-width around 600px, test on mobile devices.\n\n3. **Use absolute image URLs** - Host on reliable CDN, always include \\`alt\\` text.\n\n4. **Provide plain text version** - Required for accessibility and some email clients.\n\n5. **Keep file size under 102KB** - Gmail clips larger emails.\n\n6. **Add proper TypeScript types** - Define interfaces for all email props.\n\n7. **Include preview props** - Add \\`.PreviewProps\\` to components for development testing.\n\n8. **Handle errors** - Always check for errors when sending emails.\n\n9.  **Use verified domains** - For production, use verified domains in \\`from\\` addresses.\n\n## Common Patterns\n\nSee [references/PATTERNS.md](references/PATTERNS.md) for complete examples including:\n- Password reset emails\n- Order confirmations with product lists\n- Notification emails with code blocks\n- Multi-column layouts\n- Email templates with custom fonts\n\n## Additional Resources\n\n- [React Email Documentation](https://react.email/docs/llms.txt)\n- [React Email GitHub](https://github.com/resend/react-email)\n- [Resend Documentation](https://resend.com/docs/llms.txt)\n- [Email Client CSS Support](https://www.caniemail.com)\n- Component Reference: [references/COMPONENTS.md](references/COMPONENTS.md)\n- Internationalization Guide: [references/I18N.md](references/I18N.md)\n- Common Patterns: [references/PATTERNS.md](references/PATTERNS.md)\n\nFile v1.0.0:README.md\n\n# React Email Agent Skill\n\nThis directory contains an Agent Skill for building HTML emails with React Email components.\n\n## Structure\n\n```\nreact-email/\n├── SKILL.md                  # Main skill instructions\n└── references/\n    ├── COMPONENTS.md         # Complete component reference\n    ├── I18N.md              # Internationalization guide\n    └── PATTERNS.md          # Common email patterns and examples\n```\n\n## What is an Agent Skill?\n\nAgent Skills are a standardized format for giving AI agents specialized knowledge and workflows. This skill teaches agents how to:\n\n- Build HTML email templates using React Email components\n- Send emails through Resend and other providers\n- Implement internationalization for multi-language support\n- Follow email development best practices\n\n## Using This Skill\n\nAI agents can load this skill to gain expertise in React Email development. The skill follows the [Agent Skills specification](https://agentskills.io) with:\n\n- **SKILL.md**: Core instructions loaded when the skill is activated (< 350 lines)\n- **references/**: Detailed documentation loaded on-demand for specific topics\n\n## Progressive Disclosure\n\nThe skill is structured for efficient context usage:\n\n1. **Metadata** (~100 tokens): Name and description in frontmatter\n2. **Core Instructions** (~3K tokens): Main SKILL.md content\n3. **Detailed References** (as needed): Component docs, i18n guides, patterns\n\nAgents load only what they need for each task.\n\n## Learn More\n\n- [React Email Documentation](https://react.email/docs/llms.txt)\n- [Agent Skills Specification](https://agentskills.io/specification.md)\n- [Resend Documentation](https://resend.com/docs/llms.txt)\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ar7f1k0g5etvh4zyrsgvr5n801t2p\",\n  \"slug\": \"react-email-skills\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1769564963221\n}\n\nFile v1.0.0:references/COMPONENTS.md\n\n# React Email Components Reference\n\nComplete reference for all React Email components. All examples use the Tailwind component for styling.\n\n**Important:** Only import the components you need. Do not use components in the code if you are not importing them.\n\n## Available Components\n\nAll components are imported from `@react-email/components`:\n\n- **Body** - A React component to wrap emails\n- **Button** - A link that is styled to look like a button\n- **CodeBlock** - Display code with a selected theme and regex highlighting using Prism.js\n- **CodeInline** - Display a predictable inline code HTML element that works on all email clients\n- **Column** - Display a column that separates content areas vertically in your email (must be used with Row)\n- **Container** - A layout component that centers your content horizontally on a breaking point\n- **Font** - A React Font component to set your fonts\n- **Head** - Contains head components, related to the document such as style and meta elements\n- **Heading** - A block of heading text\n- **Hr** - Display a divider that separates content areas in your email\n- **Html** - A React html component to wrap emails\n- **Img** - Display an image in your email\n- **Link** - A hyperlink to web pages, email addresses, or anything else a URL can address\n- **Markdown** - A Markdown component that converts markdown to valid react-email template code\n- **Preview** - A preview text that will be displayed in the inbox of the recipient\n- **Row** - Display a row that separates content areas horizontally in your email\n- **Section** - Display a section that can also be formatted using rows and columns\n- **Tailwind** - A React component to wrap emails with Tailwind CSS\n- **Text** - A block of text separated by blank spaces\n\n## Tailwind\n\nThe recommended way to style React Email components. Wrap your email content and use utility classes.\n\n```tsx\nimport { Tailwind, pixelBasedPreset, Html, Body, Container, Heading, Text, Button } from '@react-email/components';\n\nexport default function Email() {\n  return (\n    <Html lang=\"en\">\n      <Tailwind\n        config={{\n          presets: [pixelBasedPreset],\n          theme: {\n            extend: {\n              colors: {\n                brand: '#007bff',\n                accent: '#28a745'\n              },\n            },\n          },\n        }}\n      >\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"max-w-xl mx-auto p-5\">\n            <Heading className=\"text-2xl font-bold text-brand mb-4\">\n              Welcome!\n            </Heading>\n            <Text className=\"text-base text-gray-700 mb-4\">\n              Your content here.\n            </Text>\n            <Button\n              href=\"https://example.com\"\n              className=\"bg-brand text-white px-6 py-3 rounded-lg block text-center\"\n            >\n              Get Started\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\n**Props:**\n- `config` - Tailwind configuration object\n\n**How it works:**\n- Tailwind classes are converted to inline styles automatically\n- Media queries are extracted to `<style>` tag in `<head>`\n- CSS variables are resolved\n- RGB color syntax is normalized for email client compatibility\n\n**Important:**\n- Always use `pixelBasedPreset` - email clients don't support `rem` units\n- Custom config is optional - defaults work well\n- Responsive classes (sm:, md:, lg:) work via media queries, but should be used with caution due to limited email client support\n\n## Structural Components\n\n### Html\n\nRoot wrapper for the email. Always use as the outermost component.\n\n```tsx\nimport { Html, Tailwind, pixelBasedPreset } from '@react-email/components';\n\n<Html lang=\"en\" dir=\"ltr\">\n  <Tailwind config={{ presets: [pixelBasedPreset] }}>\n    {/* email content */}\n  </Tailwind>\n</Html>\n```\n\n**Props:**\n- `lang` - Language code (e.g., \"en\", \"es\", \"fr\")\n- `dir` - Text direction (\"ltr\" or \"rtl\")\n\n### Head\n\nContains head components, related to the document such as style and meta elements. Place inside `<Tailwind>`.\n\n```tsx\nimport { Head } from '@react-email/components';\n\n<Head>\n  <title>Email Title</title>\n</Head>\n```\n\n### Body\n\nA React component to wrap emails.\n\n```tsx\nimport { Body } from '@react-email/components';\n\n<Body className=\"bg-gray-100 font-sans\">\n  {/* email content */}\n</Body>\n```\n\n### Container\n\nA layout component that centers your content horizontally on a breaking point. Has a max-width constraint of `37.5em`.\n\n```tsx\nimport { Container } from '@react-email/components';\n\n<Container className=\"max-w-xl mx-auto p-5\">\n  {/* centered content */}\n</Container>\n```\n\n### Section\n\nDisplay a section that can also be formatted using rows and columns.\n\n```tsx\nimport { Section } from '@react-email/components';\n\n<Section className=\"p-5 bg-white\">\n  {/* section content */}\n</Section>\n```\n\n### Row & Column\n\nRow displays content areas horizontally, Column displays content areas vertically. A Column needs to be used in combination with a Row component.\n\n```tsx\nimport { Section, Row, Column } from '@react-email/components';\n\n<Section>\n  <Row>\n    <Column className=\"w-1/2 p-2 align-top\">\n      Left column content\n    </Column>\n    <Column className=\"w-1/2 p-2 align-top\">\n      Right column content\n    </Column>\n  </Row>\n</Section>\n```\n\n**Column widths:**\n- Use percentage widths (e.g., \"w-1/2\", \"w-1/3\")\n- Or use Tailwind's width utilities\n- Total should add up to 100% or container width\n\n## Content Components\n\n### Preview\n\nA preview text that will be displayed in the inbox of the recipient.\n\n```tsx\nimport { Preview } from '@react-email/components';\n\n<Preview>Welcome to our platform - Get started today!</Preview>\n```\n\n**Best practices:**\n- Keep under 140 characters\n- Make it compelling and action-oriented\n- Should always be the first element inside `<Body>`\n\n### Heading\n\nA block of heading text (h1-h6).\n\n```tsx\nimport { Heading } from '@react-email/components';\n\n<Heading as=\"h1\" className=\"text-2xl font-bold text-gray-800 mb-4\">\n  Welcome to Acme\n</Heading>\n\n<Heading as=\"h2\" className=\"text-xl font-semibold text-gray-600 mb-3\">\n  Getting Started\n</Heading>\n```\n\n**Props:**\n- `as` - HTML heading level (\"h1\" through \"h6\")\n\n### Text\n\nA block of text separated by blank spaces.\n\n```tsx\nimport { Text } from '@react-email/components';\n\n<Text className=\"text-base leading-6 text-gray-800 my-4\">\n  Your paragraph content here.\n</Text>\n```\n\n### Button\n\nA link that is styled to look like a button. Has workaround for padding issues in Outlook.\n\n```tsx\nimport { Button } from '@react-email/components';\n\n<Button\n  href=\"https://example.com/verify\"\n  target=\"_blank\"\n  className=\"bg-blue-600 text-white px-5 py-3 rounded block text-center no-underline font-medium\"\n>\n  Verify Email Address\n</Button>\n```\n\n**Props:**\n- `href` (required) - URL to link to\n- `target` - Default is \"_blank\"\n\n**Styling tips:**\n- Use `block` for full-width buttons\n- Use `text-center` for centered text\n- Add `no-underline` to remove underline\n\n### Link\n\nA hyperlink to web pages, email addresses, or anything else a URL can address.\n\n```tsx\nimport { Link } from '@react-email/components';\n\n<Link href=\"https://example.com\" target=\"_blank\" className=\"text-blue-600 underline\">\n  Visit our website\n</Link>\n```\n\n**Props:**\n- `href` (required) - URL to link to\n- `target` - Default is \"_blank\"\n\n### Img\n\nDisplay an image in your email.\n\n```tsx\nimport { Img } from '@react-email/components';\n\n<Img\n  src=\"https://example.com/logo.png\"\n  alt=\"Company Logo\"\n  width=\"150\"\n  height=\"50\"\n  className=\"block mx-auto\"\n/>\n```\n\n**Props:**\n- `src` (required) - Image URL (must be absolute)\n- `alt` (required) - Alt text for accessibility\n- `width` - Image width in pixels\n- `height` - Image height in pixels\n\n**Best practices:**\n- Always use absolute URLs hosted on CDN\n- Always include alt text\n- Specify width and height to prevent layout shift\n- Use `block` class to avoid spacing issues\n\n### Hr\n\nDisplay a divider that separates content areas in your email.\n\n```tsx\nimport { Hr } from '@react-email/components';\n\n<Hr className=\"border-gray-200 my-5\" />\n```\n\n## Specialized Components\n\n### CodeBlock\n\nDisplay code with a selected theme and regex highlighting using Prism.js.\n\n```tsx\nimport { CodeBlock, dracula } from '@react-email/components';\n\nconst Email = () => {\n  const code = `export default async (req, res) => {\n  try {\n    const html = await renderAsync(\n      EmailTemplate({ firstName: 'John' })\n    );\n    return NextResponse.json({ html });\n  } catch (error) {\n    return NextResponse.json({ error });\n  }\n}`;\n\n  return (\n    <div className=\"overflow-auto\">\n      <CodeBlock\n        fontFamily=\"monospace\"\n        theme={dracula}\n        language=\"javascript\"\n        code={code}\n      />\n    </div>\n  );\n};\n```\n\n**Props:**\n- `code` (required) - The actual code to render in the code block. Just a plain string, with the proper indentation included\n- `language` (required) - The language under the supported languages defined in PrismLanguage (e.g., \"javascript\", \"python\", \"typescript\")\n- `theme` (required) - The theme to use for the code block (import from \"@react-email/components\": dracula, github, nord, etc.)\n- `fontFamily` (optional) - The font family to use for the code block (e.g., \"monospace\")\n- `lineNumbers` (optional) - Whether or not to automatically include line numbers on the rendered code block (boolean, default: false)\n\n**Important:**\n- By default, do not use the `lineNumbers` prop unless specifically requested\n- Always wrap the `CodeBlock` component in a `div` tag with the `overflow-auto` class to avoid padding overflow\n\n### CodeInline\n\nDisplay a predictable inline code HTML element that works on all email clients.\n\n```tsx\nimport { Text, CodeInline } from '@react-email/components';\n\n<Text className=\"text-base text-gray-800\">\n  Run <CodeInline className=\"bg-gray-100 px-1 rounded\">npm install</CodeInline> to get started.\n</Text>\n```\n\n### Markdown\n\nA Markdown component that converts markdown to valid react-email template code.\n\n```tsx\nimport { Html, Markdown } from '@react-email/components';\n\nconst Email = () => {\n  return (\n    <Html lang=\"en\" dir=\"ltr\">\n      <Markdown\n        markdownCustomStyles={{\n          h1: { color: \"red\" },\n          h2: { color: \"blue\" },\n          codeInline: { background: \"grey\" },\n        }}\n        markdownContainerStyles={{\n          padding: \"12px\",\n          border: \"solid 1px black\",\n        }}\n      >{`# Hello, World!`}</Markdown>\n\n      {/* OR */}\n\n      <Markdown children={`# This is a ~~strikethrough~~`} />\n    </Html>\n  );\n};\n```\n\n**Props:**\n- `children` (required) - Markdown string\n- `markdownCustomStyles` - Style overrides for HTML elements (h1, h2, p, a, codeInline, etc.)\n- `markdownContainerStyles` - Styles for container div\n\n### Font\n\nA React Font component to set your fonts.\n\n```tsx\nimport { Head, Font } from '@react-email/components';\n\n<Head>\n  <Font\n    fontFamily=\"Roboto\"\n    fallbackFontFamily=\"Arial, sans-serif\"\n    webFont={{\n      url: \"https://fonts.gstatic.com/s/roboto/v27/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2\",\n      format: \"woff2\"\n    }}\n  />\n</Head>\n```\n\n**Props:**\n- `fontFamily` (required) - Font family name\n- `fallbackFontFamily` - Fallback fonts\n- `webFont` - Object with `url` and `format`\n\n**Supported formats:**\n- woff2 (recommended)\n- woff\n- truetype\n- opentype\n\nFile v1.0.0:references/I18N.md\n\n# Internationalization (i18n) Guide\n\nComplete guide for implementing multi-language email support with React Email using Tailwind CSS styling.\n\nReact Email officially supports three popular i18n libraries: next-intl, react-i18next, and react-intl.\n\n## next-intl\n\nBest choice for Next.js applications with straightforward API.\n\n### Installation\n\n```bash\nnpm install next-intl\n```\n\n### Setup\n\n**1. Create message files:**\n\n```json\n// messages/en.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Welcome to Acme\",\n    \"greeting\": \"Hi\",\n    \"body\": \"Thanks for signing up! We're excited to have you on board.\",\n    \"cta\": \"Get Started\",\n    \"footer\": \"If you have questions, reply to this email.\"\n  }\n}\n```\n\n```json\n// messages/es.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Bienvenido a Acme\",\n    \"greeting\": \"Hola\",\n    \"body\": \"¡Gracias por registrarte! Estamos emocionados de tenerte en la plataforma.\",\n    \"cta\": \"Comenzar\",\n    \"footer\": \"Si tienes preguntas, responde a este correo electrónico.\"\n  }\n}\n```\n\n```json\n// messages/fr.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Bienvenue chez Acme\",\n    \"greeting\": \"Bonjour\",\n    \"body\": \"Merci de vous être inscrit ! Nous sommes ravis de vous accueillir.\",\n    \"cta\": \"Commencer\",\n    \"footer\": \"Si vous avez des questions, répondez à cet e-mail.\"\n  }\n}\n```\n\n**2. Update email template:**\n\n```tsx\nimport { createTranslator } from 'next-intl';\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  verificationUrl: string;\n  locale: string;\n}\n\nexport default async function WelcomeEmail({\n  name,\n  verificationUrl,\n  locale\n}: WelcomeEmailProps) {\n  const t = createTranslator({\n    messages: await import(`../messages/${locale}.json`),\n    namespace: 'welcome-email',\n    locale\n  });\n\n  return (\n    <Html lang={locale}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>{t('subject')}</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl\">\n            <Heading className=\"text-2xl font-bold text-gray-800\">\n              {t('subject')}\n            </Heading>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              {t('greeting')} {name},\n            </Text>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              {t('body')}\n            </Text>\n            <Button\n              href={verificationUrl}\n              className=\"bg-blue-600 text-white px-5 py-3 rounded block text-center no-underline\"\n            >\n              {t('cta')}\n            </Button>\n            <Hr className=\"border-gray-200 my-5\" />\n            <Text className=\"text-sm text-gray-500\">\n              {t('footer')}\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\n// Preview props\nWelcomeEmail.PreviewProps = {\n  name: 'John',\n  verificationUrl: 'https://example.com/verify',\n  locale: 'en'\n} as WelcomeEmailProps;\n```\n\n**3. Send with locale:**\n\n```tsx\nawait resend.emails.send({\n  from: 'Acme <onboarding@resend.dev>',\n  to: ['user@example.com'],\n  subject: 'Welcome',\n  react: <WelcomeEmail name=\"Jean\" verificationUrl=\"...\" locale=\"fr\" />\n});\n```\n\n## react-intl (FormatJS)\n\nGood choice for complex formatting needs (plurals, dates, numbers).\n\n### Installation\n\n```bash\nnpm install react-intl\n```\n\n### Setup\n\n**1. Create message files:**\n\n```json\n// messages/en/welcome-email.json\n{\n  \"header\": \"Welcome to Acme\",\n  \"greeting\": \"Hi\",\n  \"body\": \"Thanks for signing up!\",\n  \"cta\": \"Get Started\",\n  \"itemCount\": \"{count, plural, one {# item} other {# items}}\"\n}\n```\n\n**2. Use in email:**\n\n```tsx\nimport { createIntl } from 'react-intl';\nimport {\n  Html,\n  Body,\n  Container,\n  Text,\n  Button,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  locale: string;\n  itemCount?: number;\n}\n\nexport default async function WelcomeEmail({\n  name,\n  locale,\n  itemCount = 1\n}: WelcomeEmailProps) {\n  const { formatMessage } = createIntl({\n    locale,\n    messages: await import(`../messages/${locale}/welcome-email.json`)\n  });\n\n  return (\n    <Html lang={locale}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto p-5 max-w-xl\">\n            <Text className=\"text-base text-gray-800\">\n              {formatMessage({ id: 'greeting' })} {name},\n            </Text>\n            <Text className=\"text-base text-gray-800\">\n              {formatMessage({ id: 'body' })}\n            </Text>\n            <Text className=\"text-base text-gray-800\">\n              {formatMessage({ id: 'itemCount' }, { count: itemCount })}\n            </Text>\n            <Button\n              href=\"https://example.com\"\n              className=\"bg-blue-600 text-white px-5 py-3 rounded\"\n            >\n              {formatMessage({ id: 'cta' })}\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\n## react-i18next\n\nBest for non-Next.js applications or when you need more control.\n\n### Installation\n\n```bash\nnpm install react-i18next i18next i18next-resources-to-backend\n```\n\n### Setup\n\n**1. Configure i18next:**\n\n```js\n// i18n.js\nimport i18next from 'i18next';\nimport resourcesToBackend from 'i18next-resources-to-backend';\nimport { initReactI18next } from 'react-i18next';\n\ni18next\n  .use(initReactI18next)\n  .use(resourcesToBackend((language, namespace) =>\n    import(`./messages/${language}/${namespace}.json`)\n  ))\n  .init({\n    supportedLngs: ['en', 'es', 'fr', 'de'],\n    fallbackLng: 'en',\n    lng: undefined,\n    preload: ['en', 'es', 'fr', 'de']\n  });\n\nexport { i18next };\n```\n\n**2. Create translation helper:**\n\n```js\n// get-t.js\nimport { i18next } from './i18n';\n\nexport async function getT(namespace, locale) {\n  if (locale && i18next.resolvedLanguage !== locale) {\n    await i18next.changeLanguage(locale);\n  }\n  if (namespace && !i18next.hasLoadedNamespace(namespace)) {\n    await i18next.loadNamespaces(namespace);\n  }\n  return {\n    t: i18next.getFixedT(\n      locale ?? i18next.resolvedLanguage,\n      Array.isArray(namespace) ? namespace[0] : namespace\n    ),\n    i18n: i18next\n  };\n}\n```\n\n**3. Create message files:**\n\n```json\n// messages/en/welcome-email.json\n{\n  \"subject\": \"Welcome to Acme\",\n  \"greeting\": \"Hi\",\n  \"body\": \"Thanks for signing up!\",\n  \"cta\": \"Get Started\"\n}\n```\n\n```json\n// messages/es/welcome-email.json\n{\n  \"subject\": \"Bienvenido a Acme\",\n  \"greeting\": \"Hola\",\n  \"body\": \"¡Gracias por registrarte!\",\n  \"cta\": \"Comenzar\"\n}\n```\n\n**4. Use in email template:**\n\n```tsx\nimport { getT } from '../get-t';\nimport {\n  Html,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  locale: string;\n}\n\nexport default async function WelcomeEmail({ name, locale }: WelcomeEmailProps) {\n  const { t } = await getT('welcome-email', locale);\n\n  return (\n    <Html lang={locale}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto p-5 max-w-xl\">\n            <Heading className=\"text-2xl font-bold text-gray-800\">\n              {t('subject')}\n            </Heading>\n            <Text className=\"text-base text-gray-800\">\n              {t('greeting')} {name},\n            </Text>\n            <Text className=\"text-base text-gray-800\">\n              {t('body')}\n            </Text>\n            <Button\n              href=\"https://example.com\"\n              className=\"bg-blue-600 text-white px-5 py-3 rounded\"\n            >\n              {t('cta')}\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\n\n## Message File Organization\n\n### By Namespace (Recommended)\n\nOrganize translations by email template:\n\n```\nmessages/\n├── en.json          # All English translations\n│   ├── welcome-email\n│   ├── password-reset\n│   └── order-confirmation\n├── es.json          # All Spanish translations\n└── fr.json          # All French translations\n```\n\nOr organize by template with separate files:\n\n```\nmessages/\n├── en/\n│   ├── welcome-email.json\n│   ├── password-reset.json\n│   └── order-confirmation.json\n├── es/\n│   ├── welcome-email.json\n│   ├── password-reset.json\n│   └── order-confirmation.json\n└── fr/\n    ├── welcome-email.json\n    ├── password-reset.json\n    └── order-confirmation.json\n```\n\n### Translation Keys\n\nUse descriptive, hierarchical keys:\n\n```json\n{\n  \"welcome-email\": {\n    \"subject\": \"Welcome!\",\n    \"preview\": \"Get started with your account\",\n    \"header\": {\n      \"title\": \"Welcome to Acme\",\n      \"subtitle\": \"We're glad you're here\"\n    },\n    \"body\": {\n      \"greeting\": \"Hi\",\n      \"intro\": \"Thanks for signing up!\",\n      \"next-steps\": \"Here's how to get started:\"\n    },\n    \"cta\": {\n      \"primary\": \"Get Started\",\n      \"secondary\": \"Learn More\"\n    },\n    \"footer\": {\n      \"help\": \"Need help? Reply to this email\",\n      \"unsubscribe\": \"Unsubscribe from these emails\"\n    }\n  }\n}\n```\n\n## Best Practices\n\n### 1. Always Pass Locale\n\nMake locale a required prop:\n\n```tsx\ninterface EmailProps {\n  locale: string;\n  // other props...\n}\n```\n\n### 2. Set HTML Lang Attribute\n\n```tsx\n<Html lang={locale}>\n```\n\n### 3. Support RTL Languages\n\nFor Arabic, Hebrew, etc.:\n\n```tsx\nconst isRTL = ['ar', 'he', 'fa'].includes(locale);\n\n<Html lang={locale} dir={isRTL ? 'rtl' : 'ltr'}>\n```\n\n### 4. Fallback Values\n\nProvide fallback translations:\n\n```tsx\nconst t = createTranslator({\n  messages: await import(`../messages/${locale}.json`).catch(() =>\n    import('../messages/en.json')\n  ),\n  locale,\n  namespace: 'welcome-email'\n});\n```\n\n### 5. Test All Locales\n\nTest email rendering for each supported locale:\n\n```tsx\nWelcomeEmail.PreviewProps = {\n  name: 'Test User',\n  locale: 'en'  // Change to test different locales\n} as WelcomeEmailProps;\n```\n\n### 6. Keep Keys Consistent\n\nUse the same translation keys across all locale files:\n\n```json\n// ✅ Good\n// en.json: { \"cta\": \"Get Started\" }\n// es.json: { \"cta\": \"Comenzar\" }\n\n// ❌ Bad\n// en.json: { \"button\": \"Get Started\" }\n// es.json: { \"cta\": \"Comenzar\" }\n```\n\n### 7. Handle Missing Translations\n\nSet up fallback behavior:\n\n```tsx\n// With next-intl\nconst t = createTranslator({\n  messages,\n  locale,\n  namespace: 'welcome-email',\n  onError: (error) => {\n    console.warn('Translation missing:', error);\n  }\n});\n```\n\n### 8. Subject Line Translation\n\nDon't forget to translate email subjects:\n\n```tsx\nconst t = createTranslator({...});\n\nawait resend.emails.send({\n  from: 'Acme <onboarding@resend.dev>',\n  to: [user.email],\n  subject: t('subject'),  // ✅ Translated subject\n  react: <WelcomeEmail {...props} />\n});\n```\n\n### 9. Format Consistency\n\nMaintain consistent formatting across locales:\n- Date formats (MM/DD/YYYY vs DD/MM/YYYY)\n- Time formats (12h vs 24h)\n- Number separators (1,234.56 vs 1.234,56)\n- Currency symbols and placement ($100 vs 100$)\n\nUse `Intl` APIs for automatic locale-specific formatting.\n\n## Example: Complete Multi-locale Email\n\n```tsx\nimport { createTranslator } from 'next-intl';\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Section,\n  Heading,\n  Text,\n  Button,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface OrderConfirmationProps {\n  orderNumber: string;\n  total: number;\n  currency: string;\n  locale: string;\n  orderDate: Date;\n}\n\nexport default async function OrderConfirmation({\n  orderNumber,\n  total,\n  currency,\n  locale,\n  orderDate\n}: OrderConfirmationProps) {\n  const t = createTranslator({\n    messages: await import(`../messages/${locale}.json`),\n    namespace: 'order-confirmation',\n    locale\n  });\n\n  const isRTL = ['ar', 'he'].includes(locale);\n\n  const currencyFormatter = new Intl.NumberFormat(locale, {\n    style: 'currency',\n    currency\n  });\n\n  const dateFormatter = new Intl.DateTimeFormat(locale, {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric'\n  });\n\n  return (\n    <Html lang={locale} dir={isRTL ? 'rtl' : 'ltr'}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>{t('preview')}</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl\">\n            <Heading className=\"text-2xl font-bold text-gray-800\">\n              {t('title')}\n            </Heading>\n            <Text className=\"text-base text-gray-800 my-2\">\n              {t('order-number')}: {orderNumber}\n            </Text>\n            <Text className=\"text-base text-gray-800 my-2\">\n              {t('order-date')}: {dateFormatter.format(orderDate)}\n            </Text>\n            <Section className=\"bg-white p-5 rounded my-4\">\n              <Text className=\"text-xl font-bold text-gray-800\">\n                {t('total')}: {currencyFormatter.format(total)}\n              </Text>\n            </Section>\n            <Button\n              href={`https://example.com/orders/${orderNumber}`}\n              className=\"bg-blue-600 text-white px-5 py-3 rounded block text-center no-underline my-5\"\n            >\n              {t('view-order')}\n            </Button>\n            <Hr className=\"border-gray-200 my-5\" />\n            <Text className=\"text-sm text-gray-500\">\n              {t('footer')}\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\nWith message files:\n\n```json\n// messages/en.json\n{\n  \"order-confirmation\": {\n    \"preview\": \"Your order has been confirmed\",\n    \"title\": \"Order Confirmed\",\n    \"order-number\": \"Order number\",\n    \"order-date\": \"Order date\",\n    \"total\": \"Total\",\n    \"view-order\": \"View Order\",\n    \"footer\": \"Thank you for your purchase!\"\n  }\n}\n```\n\n```json\n// messages/es.json\n{\n  \"order-confirmation\": {\n    \"preview\": \"Tu pedido ha sido confirmado\",\n    \"title\": \"Pedido Confirmado\",\n    \"order-number\": \"Número de pedido\",\n    \"order-date\": \"Fecha del pedido\",\n    \"total\": \"Total\",\n    \"view-order\": \"Ver Pedido\",\n    \"footer\": \"¡Gracias por tu compra!\"\n  }\n}\n```\n\nFile v1.0.0:references/PATTERNS.md\n\n# Common Email Patterns\n\nReal-world examples of common email templates using React Email with Tailwind CSS styling.\n\n## Password Reset Email\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface PasswordResetProps {\n  resetUrl: string;\n  email: string;\n  expiryHours?: number;\n}\n\nexport default function PasswordReset({ resetUrl, email, expiryHours = 1 }: PasswordResetProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>Reset your password - Action required</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl bg-white\">\n            <Heading className=\"text-2xl font-bold text-gray-800 mb-5\">\n              Reset Your Password\n            </Heading>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              A password reset was requested for your account: <strong>{email}</strong>\n            </Text>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              Click the button below to reset your password. This link expires in {expiryHours} hour{expiryHours > 1 ? 's' : ''}.\n            </Text>\n            <Button\n              href={resetUrl}\n              className=\"bg-red-600 text-white px-7 py-3.5 rounded block text-center font-bold my-6 no-underline\"\n            >\n              Reset Password\n            </Button>\n            <Hr className=\"border-gray-200 my-6\" />\n            <Text className=\"text-sm text-gray-500 leading-5 my-2\">\n              If you didn't request this, please ignore this email. Your password will remain unchanged.\n            </Text>\n            <Text className=\"text-sm text-gray-500 leading-5 my-2\">\n              For security, this link will only work once.\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\nPasswordReset.PreviewProps = {\n  resetUrl: 'https://example.com/reset/abc123',\n  email: 'user@example.com',\n  expiryHours: 1\n} as PasswordResetProps;\n```\n\n## Order Confirmation with Product List\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Section,\n  Row,\n  Column,\n  Heading,\n  Text,\n  Img,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface Product {\n  name: string;\n  price: number;\n  quantity: number;\n  image: string;\n  sku?: string;\n}\n\ninterface OrderConfirmationProps {\n  orderNumber: string;\n  orderDate: Date;\n  items: Product[];\n  subtotal: number;\n  shipping: number;\n  tax: number;\n  total: number;\n  shippingAddress: {\n    name: string;\n    street: string;\n    city: string;\n    state: string;\n    zip: string;\n    country: string;\n  };\n}\n\nexport default function OrderConfirmation({\n  orderNumber,\n  orderDate,\n  items,\n  subtotal,\n  shipping,\n  tax,\n  total,\n  shippingAddress\n}: OrderConfirmationProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>Order #{orderNumber} confirmed - Thank you for your purchase!</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl\">\n            <Heading className=\"text-3xl font-bold text-gray-800 mb-2\">\n              Order Confirmed\n            </Heading>\n            <Text className=\"text-base text-gray-500 mb-6\">Thank you for your order!</Text>\n\n            <Section className=\"bg-gray-50 p-4 rounded mb-6\">\n              <Row>\n                <Column>\n                  <Text className=\"text-xs text-gray-500 uppercase mb-1\">Order Number</Text>\n                  <Text className=\"text-base font-bold text-gray-800 m-0\">#{orderNumber}</Text>\n                </Column>\n                <Column>\n                  <Text className=\"text-xs text-gray-500 uppercase mb-1\">Order Date</Text>\n                  <Text className=\"text-base font-bold text-gray-800 m-0\">{orderDate.toLocaleDateString()}</Text>\n                </Column>\n              </Row>\n            </Section>\n\n            <Hr className=\"border-gray-200 my-6\" />\n\n            <Heading as=\"h2\" className=\"text-xl font-bold text-gray-800 my-4\">\n              Order Items\n            </Heading>\n\n            {items.map((item, index) => (\n              <Section key={index} className=\"mb-4\">\n                <Row>\n                  <Column className=\"w-20 align-top\">\n                    <Img\n                      src={item.image}\n                      alt={item.name}\n                      width=\"80\"\n                      height=\"80\"\n                      className=\"rounded border border-gray-200\"\n                    />\n                  </Column>\n                  <Column className=\"align-top pl-4\">\n                    <Text className=\"text-base font-bold text-gray-800 m-0 mb-1\">{item.name}</Text>\n                    {item.sku && <Text className=\"text-sm text-gray-400 m-0 mb-2\">SKU: {item.sku}</Text>}\n                    <Text className=\"text-sm text-gray-500 m-0\">\n                      Quantity: {item.quantity} × ${item.price.toFixed(2)}\n                    </Text>\n                  </Column>\n                  <Column className=\"w-24 text-right align-top\">\n                    <Text className=\"text-base font-bold text-gray-800 m-0\">\n                      ${(item.quantity * item.price).toFixed(2)}\n                    </Text>\n                  </Column>\n                </Row>\n              </Section>\n            ))}\n\n            <Hr className=\"border-gray-200 my-6\" />\n\n            <Section className=\"mt-6\">\n              <Row>\n                <Column><Text className=\"text-sm text-gray-500 my-2\">Subtotal</Text></Column>\n                <Column className=\"text-right\">\n                  <Text className=\"text-sm text-gray-800 my-2\">${subtotal.toFixed(2)}</Text>\n                </Column>\n              </Row>\n              <Row>\n                <Column><Text className=\"text-sm text-gray-500 my-2\">Shipping</Text></Column>\n                <Column className=\"text-right\">\n                  <Text className=\"text-sm text-gray-800 my-2\">${shipping.toFixed(2)}</Text>\n                </Column>\n              </Row>\n              <Row>\n                <Column><Text className=\"text-sm text-gray-500 my-2\">Tax</Text></Column>\n                <Column className=\"text-right\">\n                  <Text className=\"text-sm text-gray-800 my-2\">${tax.toFixed(2)}</Text>\n                </Column>\n              </Row>\n              <Hr className=\"border-gray-200 my-3\" />\n              <Row>\n                <Column><Text className=\"text-lg font-bold text-gray-800 my-2\">Total</Text></Column>\n                <Column className=\"text-right\">\n                  <Text className=\"text-lg font-bold text-gray-800 my-2\">${total.toFixed(2)}</Text>\n                </Column>\n              </Row>\n            </Section>\n\n            <Hr className=\"border-gray-200 my-6\" />\n\n            <Heading as=\"h2\" className=\"text-xl font-bold text-gray-800 my-4\">\n              Shipping Address\n            </Heading>\n            <Section className=\"bg-gray-50 p-4 rounded\">\n              <Text className=\"text-sm text-gray-800 my-1\">{shippingAddress.name}</Text>\n              <Text className=\"text-sm text-gray-800 my-1\">{shippingAddress.street}</Text>\n              <Text className=\"text-sm text-gray-800 my-1\">\n                {shippingAddress.city}, {shippingAddress.state} {shippingAddress.zip}\n              </Text>\n              <Text className=\"text-sm text-gray-800 my-1\">{shippingAddress.country}</Text>\n            </Section>\n\n            <Text className=\"text-sm text-gray-500 mt-8\">\n              Questions about your order? Reply to this email and we'll help you out.\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\nOrderConfirmation.PreviewProps = {\n  orderNumber: '10234',\n  orderDate: new Date(),\n  items: [\n    {\n      name: 'Vintage Macintosh',\n      price: 499.00,\n      quantity: 1,\n      image: 'https://via.placeholder.com/80',\n      sku: 'MAC-001'\n    },\n    {\n      name: 'Mechanical Keyboard',\n      price: 149.99,\n      quantity: 2,\n      image: 'https://via.placeholder.com/80',\n      sku: 'KEY-042'\n    }\n  ],\n  subtotal: 798.98,\n  shipping: 15.00,\n  tax: 69.42,\n  total: 883.40,\n  shippingAddress: {\n    name: 'John Doe',\n    street: '123 Main St',\n    city: 'San Francisco',\n    state: 'CA',\n    zip: '94102',\n    country: 'USA'\n  }\n} as OrderConfirmationProps;\n```\n\n## Notification Email with Code Block\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Section,\n  Heading,\n  Text,\n  CodeBlock,\n  dracula,\n  Hr,\n  Link,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface NotificationProps {\n  title: string;\n  message: string;\n  severity: 'info' | 'warning' | 'error' | 'success';\n  timestamp: Date;\n  logData?: string;\n  actionUrl?: string;\n  actionLabel?: string;\n}\n\nexport default function Notification({\n  title,\n  message,\n  severity,\n  timestamp,\n  logData,\n  actionUrl,\n  actionLabel = 'View Details'\n}: NotificationProps) {\n  const severityColors = {\n    info: 'bg-sky-500',\n    warning: 'bg-amber-500',\n    error: 'bg-red-500',\n    success: 'bg-green-500'\n  };\n\n  const severityBtnColors = {\n    info: 'bg-sky-500',\n    warning: 'bg-amber-500',\n    error: 'bg-red-500',\n    success: 'bg-green-500'\n  };\n\n  return (\n    <Html lang=\"en\">\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>{title} - {severity}</Preview>\n        <Body className=\"bg-gray-100 font-mono\">\n          <Container className=\"mx-auto max-w-xl bg-white border border-gray-200 rounded overflow-hidden\">\n            <Section className={`h-1 w-full ${severityColors[severity]}`} />\n\n            <Heading className=\"text-2xl font-bold text-gray-800 mx-6 mt-6 mb-4\">\n              {title}\n            </Heading>\n\n            <Text className={`inline-block px-3 py-1 text-xs font-bold text-white rounded-full mx-6 mb-4 ${severityBtnColors[severity]}`}>\n              {severity.toUpperCase()}\n            </Text>\n\n            <Text className=\"text-base leading-6 text-gray-800 mx-6 mb-4\">\n              {message}\n            </Text>\n\n            <Text className=\"text-sm text-gray-500 mx-6 mb-6\">\n              {new Date(timestamp).toLocaleString('en-US', {\n                dateStyle: 'long',\n                timeStyle: 'short'\n              })}\n            </Text>\n\n            {logData && (\n              <>\n                <Hr className=\"border-gray-200 my-6\" />\n                <Heading as=\"h2\" className=\"text-lg font-bold text-gray-800 mx-6 my-4\">\n                  Log Details\n                </Heading>\n                <Section className=\"mx-6\">\n                  <CodeBlock\n                    code={logData}\n                    language=\"json\"\n                    theme={dracula}\n                    lineNumbers\n                  />\n                </Section>\n              </>\n            )}\n\n            {actionUrl && (\n              <>\n                <Hr className=\"border-gray-200 my-6\" />\n                <Link\n                  href={actionUrl}\n                  className={`inline-block px-6 py-3 text-base font-bold text-white rounded no-underline mx-6 mb-6 ${severityBtnColors[severity]}`}\n                >\n                  {actionLabel}\n                </Link>\n              </>\n            )}\n\n            <Hr className=\"border-gray-200 my-6\" />\n            <Text className=\"text-xs text-gray-500 mx-6 mb-6\">\n              This is an automated notification. Please do not reply to this email.\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\nNotification.PreviewProps = {\n  title: 'Deployment Failed',\n  message: 'The deployment to production environment has failed. Please review the logs and take corrective action.',\n  severity: 'error',\n  timestamp: new Date(),\n  logData: `{\n  \"error\": \"Build failed\",\n  \"exit_code\": 1,\n  \"duration\": \"2m 34s\",\n  \"commit\": \"abc123def\"\n}`,\n  actionUrl: 'https://example.com/deployments/123',\n  actionLabel: 'View Deployment'\n} as NotificationProps;\n```\n\n## Multi-Column Newsletter\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Section,\n  Row,\n  Column,\n  Heading,\n  Text,\n  Img,\n  Button,\n  Hr,\n  Link,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface Article {\n  title: string;\n  excerpt: string;\n  image: string;\n  url: string;\n  author: string;\n  date: string;\n}\n\ninterface NewsletterProps {\n  articles: Article[];\n  unsubscribeUrl: string;\n}\n\nexport default function Newsletter({ articles, unsubscribeUrl }: NewsletterProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>Your weekly roundup of the latest articles</Preview>\n        <Body className=\"bg-white font-sans\">\n          <Container className=\"mx-auto max-w-xl\">\n            {/* Header */}\n            <Section className=\"pt-10 px-5 pb-5 text-center\">\n              <Img\n                src=\"https://via.placeholder.com/150x50?text=Logo\"\n                alt=\"Company Logo\"\n                width=\"150\"\n                height=\"50\"\n              />\n            </Section>\n\n            <Heading className=\"text-3xl font-bold text-gray-900 mx-5 mb-4 text-center\">\n              This Week's Highlights\n            </Heading>\n            <Text className=\"text-base leading-6 text-gray-500 mx-5 mb-6 text-center\">\n              Here are the top articles from this week. Enjoy your reading!\n            </Text>\n\n            <Hr className=\"border-gray-200 mx-5 my-8\" />\n\n            {/* Featured Article */}\n            {articles[0] && (\n              <Section className=\"px-5\">\n                <Img\n                  src={articles[0].image}\n                  alt={articles[0].title}\n                  width=\"600\"\n                  className=\"w-full rounded-lg mb-4\"\n                />\n                <Heading as=\"h2\" className=\"text-2xl font-bold text-gray-900 my-4\">\n                  {articles[0].title}\n                </Heading>\n                <Text className=\"text-base leading-6 text-gray-500 my-4\">\n                  {articles[0].excerpt}\n                </Text>\n                <Text className=\"text-sm text-gray-400 my-2\">\n                  By {articles[0].author} • {articles[0].date}\n                </Text>\n                <Button\n                  href={articles[0].url}\n                  className=\"bg-blue-600 text-white px-6 py-3 rounded font-bold inline-block no-underline\"\n                >\n                  Read More\n                </Button>\n              </Section>\n            )}\n\n            <Hr className=\"border-gray-200 mx-5 my-8\" />\n\n            {/* Two-Column Articles */}\n            {articles.slice(1, 5).length > 0 && (\n              <>\n                <Heading as=\"h2\" className=\"text-2xl font-bold text-gray-900 mx-5 my-4\">\n                  More From This Week\n                </Heading>\n                {Array.from({ length: Math.ceil(articles.slice(1, 5).length / 2) }).map((_, rowIndex) => {\n                  const leftArticle = articles[1 + rowIndex * 2];\n                  const rightArticle = articles[2 + rowIndex * 2];\n\n                  return (\n                    <Section key={rowIndex} className=\"px-5 mb-6\">\n                      <Row>\n                        {leftArticle && (\n                          <Column className=\"w-1/2 align-top px-1\">\n                            <Img\n                              src={leftArticle.image}\n                              alt={leftArticle.title}\n                              width=\"280\"\n                              className=\"w-full rounded mb-3\"\n                            />\n                            <Heading as=\"h3\" className=\"text-lg font-bold text-gray-900 my-3\">\n                              {leftArticle.title}\n                            </Heading>\n                            <Text className=\"text-sm leading-5 text-gray-500 my-2\">\n                              {leftArticle.excerpt}\n                            </Text>\n                            <Link href={leftArticle.url} className=\"text-sm text-blue-600 no-underline font-semibold\">\n                              Read article →\n                            </Link>\n                          </Column>\n                        )}\n\n                        {rightArticle && (\n                          <Column className=\"w-1/2 align-top px-1\">\n                            <Img\n                              src={rightArticle.image}\n                              alt={rightArticle.title}\n                              width=\"280\"\n                              className=\"w-full rounded mb-3\"\n                            />\n                            <Heading as=\"h3\" className=\"text-lg font-bold text-gray-900 my-3\">\n                              {rightArticle.title}\n                            </Heading>\n                            <Text className=\"text-sm leading-5 text-gray-500 my-2\">\n                              {rightArticle.excerpt}\n                            </Text>\n                            <Link href={rightArticle.url} className=\"text-sm text-blue-600 no-underline font-semibold\">\n                              Read article →\n                            </Link>\n                          </Column>\n                        )}\n                      </Row>\n                    </Section>\n                  );\n                })}\n              </>\n            )}\n\n            <Hr className=\"border-gray-200 mx-5 my-8\" />\n\n            {/* Footer */}\n            <Section className=\"bg-gray-50 p-8 mt-8 text-center\">\n              <Text className=\"text-sm text-gray-500 my-2\">\n                You're receiving this because you subscribed to our newsletter.\n              </Text>\n              <Link href={unsubscribeUrl} className=\"text-sm text-blue-600 underline block my-2\">\n                Unsubscribe from this list\n              </Link>\n              <Text className=\"text-sm text-gray-500 my-2\">\n                © 2026 Company Name. All rights reserved.\n              </Text>\n            </Section>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\nNewsletter.PreviewProps = {\n  articles: [\n    {\n      title: 'The Future of Web Development in 2026',\n      excerpt: 'Exploring the latest trends and technologies shaping modern web development.',\n      image: 'https://via.placeholder.com/600x300',\n      url: 'https://example.com/article-1',\n      author: 'Jane Doe',\n      date: 'Jan 15, 2026'\n    },\n    {\n      title: 'React Server Components Explained',\n      excerpt: 'A deep dive into React Server Components and their benefits.',\n      image: 'https://via.placeholder.com/280x140',\n      url: 'https://example.com/article-2',\n      author: 'John Smith',\n      date: 'Jan 14, 2026'\n    },\n    {\n      title: 'Building Accessible Web Apps',\n      excerpt: 'Best practices for creating inclusive digital experiences.',\n      image: 'https://via.placeholder.com/280x140',\n      url: 'https://example.com/article-3',\n      author: 'Sarah Johnson',\n      date: 'Jan 13, 2026'\n    }\n  ],\n  unsubscribeUrl: 'https://example.com/unsubscribe'\n} as NewsletterProps;\n```\n\n## Team Invitation Email\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Section,\n  Heading,\n  Text,\n  Button,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface TeamInvitationProps {\n  inviterName: string;\n  inviterEmail: string;\n  teamName: string;\n  role: string;\n  inviteUrl: string;\n  expiryDays: number;\n}\n\nexport default function TeamInvitation({\n  inviterName,\n  inviterEmail,\n  teamName,\n  role,\n  inviteUrl,\n  expiryDays\n}: TeamInvitationProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>You've been invited to join {teamName}</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl bg-white\">\n            <Heading className=\"text-3xl font-bold text-gray-800 text-center mb-6\">\n              You're Invited!\n            </Heading>\n\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              <strong>{inviterName}</strong> ({inviterEmail}) has invited you to join the{' '}\n              <strong>{teamName}</strong> team.\n            </Text>\n\n            <Section className=\"bg-gray-50 p-5 rounded border border-gray-200 my-6\">\n              <Text className=\"text-xs text-gray-500 uppercase font-bold mb-2\">Role</Text>\n              <Text className=\"text-lg font-bold text-gray-800 m-0\">{role}</Text>\n            </Section>\n\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              Click the button below to accept the invitation and get started.\n            </Text>\n\n            <Button\n              href={inviteUrl}\n              className=\"bg-green-600 text-white px-7 py-3.5 rounded block text-center font-bold text-base my-6 no-underline\"\n            >\n              Accept Invitation\n            </Button>\n\n            <Hr className=\"border-gray-200 my-6\" />\n\n            <Text className=\"text-sm text-gray-500 leading-5 my-2\">\n              This invitation will expire in {expiryDays} day{expiryDays > 1 ? 's' : ''}.\n            </Text>\n            <Text className=\"text-sm text-gray-500 leading-5 my-2\">\n              If you weren't expecting this invitation, you can safely ignore this email.\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\nTeamInvitation.PreviewProps = {\n  inviterName: 'John Doe',\n  inviterEmail: 'john@example.com',\n  teamName: 'Acme Corp Engineering',\n  role: 'Developer',\n  inviteUrl: 'https://example.com/invite/abc123',\n  expiryDays: 7\n} as TeamInvitationProps;\n```\n\nThese patterns demonstrate:\n- Tailwind CSS utility classes for styling\n- Proper component usage with `pixelBasedPreset`\n- TypeScript typing\n- Preview props for testing\n- Responsive layouts\n- Common email scenarios\n\nFile v1.0.0:references/SENDING.md\n\nBelow are general guidelines for sending emails with React Email.\n\n### Send with Resend (Recommended)\n\nWhen you have access to the Resend MCP tool:\n\n```typescript\nimport { render } from '@react-email/components';\nimport { WelcomeEmail } from './emails/welcome';\n\n// Render to HTML\nconst html = await render(\n  <WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />\n);\n\n// Create plain text version\nconst text = await render(<WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />, { plainText: true });\n\n// Use Resend MCP send-email tool with:\n// - to: recipient@example.com\n// - subject: Welcome to Acme\n// - html: html\n// - text: text\n```\n\nIf no MCP tool is available, you can use the Resend SDK for Node.js to send the email, which can accept React components directly:\n\n```tsx\nimport { Resend } from 'resend';\nimport { WelcomeEmail } from './emails/welcome';\n\nconst resend = new Resend(process.env.RESEND_API_KEY);\n\nconst { data, error } = await resend.emails.send({\n  from: 'Acme <onboarding@resend.dev>',\n  to: ['user@example.com'],\n  subject: 'Welcome to Acme',\n  react: <WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />\n});\n\nif (error) {\n  console.error('Failed to send:', error);\n}\n```\n\nThe Node SDK automatically handles the plain-text rendering and HTML rendering for you.\n\n### Send as a Template to Resend\n\nIf preferred, you can upload the email as a template to Resend, which can be used to send emails with the Resend SDK for Node.js:\n\n```bash\nnpx react-email@latest resend setup\n```\n\nThis will require the user to provide a Resend API key in the terminal.\n\nOnce configured, the user can select a template to send using the UI in the \"Resend\" tab using the \"Upload\" button or the \"Bulk Upload\" button to upload multiple emails at once.\n\nIf using a template when sending with the Resend SDK for Node.js, the user can pass the template ID to the `send` method:\n\n```tsx\nawait resend.emails.send({\n  from: 'Acme <onboarding@resend.dev>',\n  to: ['user@example.com'],\n  subject: 'Welcome to Acme',\n  template: {\n    id: '1245-1256-1234-1234',\n  }\n});\n```\n\n### Send with Other Providers\n\n**Nodemailer:**\n\n```tsx\nimport { render } from '@react-email/components';\nimport nodemailer from 'nodemailer';\n\nconst transporter = nodemailer.createTransport({\n  host: 'smtp.example.com',\n  port: 587,\n  auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS }\n});\n\nconst html = await render(<WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />);\n\nawait transporter.sendMail({\n  from: 'noreply@example.com',\n  to: 'user@example.com',\n  subject: 'Welcome',\n  html\n});\n```\n\n**SendGrid:**\n\n```tsx\nimport { render } from '@react-email/components';\nimport sgMail from '@sendgrid/mail';\n\nsgMail.setApiKey(process.env.SENDGRID_API_KEY);\n\nconst html = await render(<WelcomeEmail name=\"John\" verificationUrl=\"https://example.com/verify\" />);\n\nawait sgMail.send({\n  to: 'user@example.com',\n  from: 'noreply@example.com',\n  subject: 'Welcome',\n  html\n});\n```","readmeExcerpt":"Skill: React Email Skills Owner: christina-de-martinez Summary: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates. Tags: latest:1.0.0 Ve","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"npx create-email@latest"},{"language":"sh","snippet":"yarn create email"},{"language":"sh","snippet":"pnpm create email"},{"language":"sh","snippet":"bun create email"},{"language":"sh","snippet":"cd react-email-starter"},{"language":"sh","snippet":"npm install"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: react-email\ndescription: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates.\nlicense: MIT\nmetadata:\n  author: Resend\n  repository: https://github.com/resend/react-email\n---\n\n# React Email\n\nBuild and send HTML emails using React components - a modern, component-based approach to email development that works across all major email clients.\n\n## Installation\n\nYou need to scaffold a new React Email project using the create-email CLI. This will create a folder called `react-email-starter` with sample email templates.\n\nUsing npm:\n```sh\nnpx create-email@latest\n```\n\nUsing yarn:\n```sh\nyarn create email\n```\n\nUsing pnpm:\n```sh\npnpm create email\n```\n\nUsing bun:\n```sh\nbun create email\n```\n\n## Navigate to Project Directory\n\nYou must change into the newly created project folder:\n\n```sh\ncd react-email-starter\n```\n\n## Install Dependencies\n\nYou need to install all project dependencies before running the development server.\n\nUsing npm:\n```sh\nnpm install\n```\n\nUsing yarn:\n```sh\nyarn\n```\n\nUsing pnpm:\n```sh\npnpm install\n```\n\nUsing bun:\n```sh\nbun install\n```\n\n## Start the Development Server\n\nYour task is to start the local preview server to view and edit email templates.\n\nUsing npm:\n```sh\nnpm run dev\n```\n\nUsing yarn:\n```sh\nyarn dev\n```\n\nUsing pnpm:\n```sh\npnpm dev\n```\n\nUsing bun:\n```sh\nbun dev\n```\n\n## Verify Installation\n\nYou must confirm the development server is running by checking that localhost:3000 is accessible. The server will display a preview interface where you can view email templates from the `emails` folder.\n\nEXECUTE NOW: Complete the above TODO list to achieve: The React Email development server is running and accessible at localhost:3000, displaying email template previews.\n\n### Notes on installation\nAssuming React Email is installed in an existing project, update the top-level package.json file with a script to run the React Email preview server.\n\n```json\n{\n  \"scripts\": {\n    \"email\": \"email dev --dir emails --port 3000\"\n  }\n}\n```\n\nMake sure the path to the emails folder is relative to the base project directory.\n\n\n### tsconfig.json updating or creation\n\nEnsure the tsconfig.json includes proper support for jsx.\n\n## Basic Email Template\n\nReplace the sample email templates. Here is how to create a new email template:\n\nCreate an email component with proper structure using the Tailwind component for styling:\n\n```tsx\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  verificationUrl: string;\n}\n\nexport default function WelcomeEmail({ name, verificationUrl }: WelcomeEmailProps) {\n  return (\n    <Html lang=\"en\">\n      <Tailwind\n  "},{"path":"README.md","content":"# React Email Agent Skill\n\nThis directory contains an Agent Skill for building HTML emails with React Email components.\n\n## Structure\n\n```\nreact-email/\n├── SKILL.md                  # Main skill instructions\n└── references/\n    ├── COMPONENTS.md         # Complete component reference\n    ├── I18N.md              # Internationalization guide\n    └── PATTERNS.md          # Common email patterns and examples\n```\n\n## What is an Agent Skill?\n\nAgent Skills are a standardized format for giving AI agents specialized knowledge and workflows. This skill teaches agents how to:\n\n- Build HTML email templates using React Email components\n- Send emails through Resend and other providers\n- Implement internationalization for multi-language support\n- Follow email development best practices\n\n## Using This Skill\n\nAI agents can load this skill to gain expertise in React Email development. The skill follows the [Agent Skills specification](https://agentskills.io) with:\n\n- **SKILL.md**: Core instructions loaded when the skill is activated (< 350 lines)\n- **references/**: Detailed documentation loaded on-demand for specific topics\n\n## Progressive Disclosure\n\nThe skill is structured for efficient context usage:\n\n1. **Metadata** (~100 tokens): Name and description in frontmatter\n2. **Core Instructions** (~3K tokens): Main SKILL.md content\n3. **Detailed References** (as needed): Component docs, i18n guides, patterns\n\nAgents load only what they need for each task.\n\n## Learn More\n\n- [React Email Documentation](https://react.email/docs/llms.txt)\n- [Agent Skills Specification](https://agentskills.io/specification.md)\n- [Resend Documentation](https://resend.com/docs/llms.txt)"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ar7f1k0g5etvh4zyrsgvr5n801t2p\",\n  \"slug\": \"react-email-skills\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1769564963221\n}"},{"path":"references/COMPONENTS.md","content":"# React Email Components Reference\n\nComplete reference for all React Email components. All examples use the Tailwind component for styling.\n\n**Important:** Only import the components you need. Do not use components in the code if you are not importing them.\n\n## Available Components\n\nAll components are imported from `@react-email/components`:\n\n- **Body** - A React component to wrap emails\n- **Button** - A link that is styled to look like a button\n- **CodeBlock** - Display code with a selected theme and regex highlighting using Prism.js\n- **CodeInline** - Display a predictable inline code HTML element that works on all email clients\n- **Column** - Display a column that separates content areas vertically in your email (must be used with Row)\n- **Container** - A layout component that centers your content horizontally on a breaking point\n- **Font** - A React Font component to set your fonts\n- **Head** - Contains head components, related to the document such as style and meta elements\n- **Heading** - A block of heading text\n- **Hr** - Display a divider that separates content areas in your email\n- **Html** - A React html component to wrap emails\n- **Img** - Display an image in your email\n- **Link** - A hyperlink to web pages, email addresses, or anything else a URL can address\n- **Markdown** - A Markdown component that converts markdown to valid react-email template code\n- **Preview** - A preview text that will be displayed in the inbox of the recipient\n- **Row** - Display a row that separates content areas horizontally in your email\n- **Section** - Display a section that can also be formatted using rows and columns\n- **Tailwind** - A React component to wrap emails with Tailwind CSS\n- **Text** - A block of text separated by blank spaces\n\n## Tailwind\n\nThe recommended way to style React Email components. Wrap your email content and use utility classes.\n\n```tsx\nimport { Tailwind, pixelBasedPreset, Html, Body, Container, Heading, Text, Button } from '@react-email/components';\n\nexport default function Email() {\n  return (\n    <Html lang=\"en\">\n      <Tailwind\n        config={{\n          presets: [pixelBasedPreset],\n          theme: {\n            extend: {\n              colors: {\n                brand: '#007bff',\n                accent: '#28a745'\n              },\n            },\n          },\n        }}\n      >\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"max-w-xl mx-auto p-5\">\n            <Heading className=\"text-2xl font-bold text-brand mb-4\">\n              Welcome!\n            </Heading>\n            <Text className=\"text-base text-gray-700 mb-4\">\n              Your content here.\n            </Text>\n            <Button\n              href=\"https://example.com\"\n              className=\"bg-brand text-white px-6 py-3 rounded-lg block text-center\"\n            >\n              Get Started\n            </Button>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n```\n\n**Props:**\n- `config` - Tailwind configura"},{"path":"references/I18N.md","content":"# Internationalization (i18n) Guide\n\nComplete guide for implementing multi-language email support with React Email using Tailwind CSS styling.\n\nReact Email officially supports three popular i18n libraries: next-intl, react-i18next, and react-intl.\n\n## next-intl\n\nBest choice for Next.js applications with straightforward API.\n\n### Installation\n\n```bash\nnpm install next-intl\n```\n\n### Setup\n\n**1. Create message files:**\n\n```json\n// messages/en.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Welcome to Acme\",\n    \"greeting\": \"Hi\",\n    \"body\": \"Thanks for signing up! We're excited to have you on board.\",\n    \"cta\": \"Get Started\",\n    \"footer\": \"If you have questions, reply to this email.\"\n  }\n}\n```\n\n```json\n// messages/es.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Bienvenido a Acme\",\n    \"greeting\": \"Hola\",\n    \"body\": \"¡Gracias por registrarte! Estamos emocionados de tenerte en la plataforma.\",\n    \"cta\": \"Comenzar\",\n    \"footer\": \"Si tienes preguntas, responde a este correo electrónico.\"\n  }\n}\n```\n\n```json\n// messages/fr.json\n{\n  \"welcome-email\": {\n    \"subject\": \"Bienvenue chez Acme\",\n    \"greeting\": \"Bonjour\",\n    \"body\": \"Merci de vous être inscrit ! Nous sommes ravis de vous accueillir.\",\n    \"cta\": \"Commencer\",\n    \"footer\": \"Si vous avez des questions, répondez à cet e-mail.\"\n  }\n}\n```\n\n**2. Update email template:**\n\n```tsx\nimport { createTranslator } from 'next-intl';\nimport {\n  Html,\n  Head,\n  Preview,\n  Body,\n  Container,\n  Heading,\n  Text,\n  Button,\n  Hr,\n  Tailwind,\n  pixelBasedPreset\n} from '@react-email/components';\n\ninterface WelcomeEmailProps {\n  name: string;\n  verificationUrl: string;\n  locale: string;\n}\n\nexport default async function WelcomeEmail({\n  name,\n  verificationUrl,\n  locale\n}: WelcomeEmailProps) {\n  const t = createTranslator({\n    messages: await import(`../messages/${locale}.json`),\n    namespace: 'welcome-email',\n    locale\n  });\n\n  return (\n    <Html lang={locale}>\n      <Tailwind config={{ presets: [pixelBasedPreset] }}>\n        <Head />\n        <Preview>{t('subject')}</Preview>\n        <Body className=\"bg-gray-100 font-sans\">\n          <Container className=\"mx-auto py-10 px-5 max-w-xl\">\n            <Heading className=\"text-2xl font-bold text-gray-800\">\n              {t('subject')}\n            </Heading>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              {t('greeting')} {name},\n            </Text>\n            <Text className=\"text-base leading-7 text-gray-800 my-4\">\n              {t('body')}\n            </Text>\n            <Button\n              href={verificationUrl}\n              className=\"bg-blue-600 text-white px-5 py-3 rounded block text-center no-underline\"\n            >\n              {t('cta')}\n            </Button>\n            <Hr className=\"border-gray-200 my-5\" />\n            <Text className=\"text-sm text-gray-500\">\n              {t('footer')}\n            </Text>\n          </Container>\n        </Body>\n      </Tailwind>\n    </Html>\n  );\n}\n\n// Preview props\nWelcomeEmail.PreviewPro"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates. Skill: React Email Skills Owner: christina-de-martinez Summary: Create beautiful, responsive HTML emails using React components with React Email. Build transactional emails with modern components, support internationalization, and integrate with email service providers like Resend. Use when creating welcome emails, password resets, notifications, order confirmations, or any HTML email templates. Tags: latest:1.0.0 Ve","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1177,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:06:01.203Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}