marketing-pages/SKILL.md
Use when creating, updating, editing, or deleting marketing/public pages in the Resend codebase. Covers page structure, component reuse rules, and the distinction between public and product design systems.
npx skillsauth add resend/design-skills marketing-pagesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Marketing pages live in src/app/(website)/. Product pages live in src/app/(dashboard)/. This skill covers the (website) route group only.
Before writing any component, search for an existing one. The codebase has two separate component systems — never mix them.
| System | Path | Use for |
|--------|------|---------|
| Product UI | src/ui/ | Dashboard/authenticated pages only |
| Public primitives | src/website/ | Marketing pages typography, buttons |
| Public compositions | src/components/website/ | Marketing feature sections |
| Page structure | src/components/public-page.tsx | Every marketing page layout |
Every marketing page must follow this composition:
import * as PublicPage from '@/components/public-page';
export default function MyPage() {
return (
<>
<script type="application/ld+json" ... /> {/* SEO JSON-LD */}
<PublicPage.Root>
<PublicPage.Header />
<MyPageHero /> {/* or PublicPage.Hero */}
<PublicPage.Container>
{/* feature sections */}
<CallToAction />
</PublicPage.Container>
<PublicPage.Footer />
</PublicPage.Root>
</>
);
}
src/website/)Use these instead of src/ui/ equivalents on marketing pages:
PublicHeading — sizes 1–6, colors: white | gradientPublicText — sizes 1–5, colors: white | gray | gradient, weights: normal | medium | semibold | boldPublicButton — appearances: white (default) | black | black-fade | fade | red; sizes: 2 | 3 | 4; supports asChild, iconLeft, iconRightPublicPage.accordion — accordion sectionsPublicPage.avatar — avatar componentsSee references/components.md for full APIs and src/components/website/ inventory.
export const metadata: Metadata = {
alternates: { canonical: '/your-path' },
title: 'Page Title · Resend',
description: '...',
openGraph: { images: [{ url: '/static/cover-image.jpg' }] },
};
Always add JSON-LD structured data using getCompanyJsonLd() from @/utils/json-ld and getBaseUrl() from @/utils/base-url.
src/app/(website)/your-page/page.tsxPublicPage.Root/Header/Container/Footer structuresrc/components/product-pages/your-page/ or reuse from src/components/website/metadata export and JSON-LD scriptsrc/components/public-page.tsx if neededsrc/app/(website)/your-page/ directorysrc/components/product-pages/your-page/ if page-specificnext.config.ts if the URL was publicsrc/styles/website.css (loaded via (website)/layout.tsx)src/ui/ classes may conflict — always prefer src/website/ primitivesreferences/components.md — Full component inventory with props and import pathstesting
Audit the Resend dashboard for design system alignment. Routes here when a user says "audit design", "design alignment", "dashboard design audit", or when triggered by the scheduled weekly routine.
development
Use when building or modifying UI in the Resend codebase. Provides component APIs, variant options, design tokens, and composition patterns for all src/ui/ primitives.
documentation
Use when needing Resend design resources. Routes to brand guidelines, visual identity, UI components, design tokens, and marketing page patterns.
documentation
Use when creating Resend marketing materials, documents, presentations, or visual content. Triggers for Resend brand, Resend style, or Resend visual identity requests.