
marketing-pages
โ 37by resend ยท part of resend/design-skills
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.
This is the playbook your agent receives when the skill activates โ you don't need to read it to use the skill, but it's here to audit before installing.
Scope
Marketing pages live in src/app/(website)/. Product pages live in src/app/(dashboard)/. This skill covers the (website) route group only.
Critical Rule: Always Reuse, Never Create
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 |
Page Structure (required pattern)
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>
</>
);
}Public Primitives (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; supportsasChild,iconLeft,iconRightPublicPage.accordionโ accordion sectionsPublicPage.avatarโ avatar components
See references/components.md for full APIs and src/components/website/ inventory.
Metadata & SEO (required for new pages)
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.
Adding a New Marketing Page
- Create
src/app/(website)/your-page/page.tsx - Use
PublicPage.Root/Header/Container/Footerstructure - Create page-specific sections in
src/components/product-pages/your-page/or reuse fromsrc/components/website/ - Add
metadataexport and JSON-LD script - Update footer links in
src/components/public-page.tsxif needed
Deleting a Marketing Page
- Remove
src/app/(website)/your-page/directory - Remove related components in
src/components/product-pages/your-page/if page-specific - Remove footer/nav links referencing the page
- Add redirect in
next.config.tsif the URL was public
Styling Notes
- Marketing pages use
src/styles/website.css(loaded via(website)/layout.tsx) - Theme is forced dark โ do not use light-mode-only classes
- Use Tailwind v4 utilities; avoid inline styles
src/ui/classes may conflict โ always prefersrc/website/primitives
References
references/components.mdโ Full component inventory with props and import paths
npx skills add https://github.com/resend/design-skills --skill marketing-pagesRun this in your project โ your agent picks the skill up automatically.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.