DESIGN.md · Analysis

React Email Design System

getdesign.md · 17 Jun 2026 · 47 colors · GeistPixel-Square, monospace, Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif

React Email Design System

A developer-focused design system for transactional email components. Combines technical precision with a dark, high-contrast aesthetic optimized for code-first workflows and component-driven architecture.

Colors

surface#000000
surface-dim#0a0a0a
surface-bright#1a1a1a
surface-container-lowest#0a0a0a
surface-container-low#111111
surface-container#1a1a1a
surface-container-high#292929
surface-container-highest#2e2e2e
on-surface#ededed
on-surface-variant#878787
inverse-surface#ededed
inverse-on-surface#000000
outline#2e2e2e
outline-variant#454545
surface-tint#ffb1ee
primary#ffb1ee
on-primary#1a0a16
primary-container#6420ff
on-primary-container#ffffff
inverse-primary#6420ff
secondary#00c4cc
on-secondary#000000
secondary-container#1a4d52
on-secondary-container#00c4cc
tertiary#f5a623
on-tertiary#1a1400
tertiary-container#3d2a0a
on-tertiary-container#f5a623
error#ff6b6b
on-error#ffffff
error-container#8b0000
on-error-container#ff6b6b
primary-fixed#ffb1ee
primary-fixed-dim#e89fd9
on-primary-fixed#1a0a16
on-primary-fixed-variant#6420ff
secondary-fixed#00c4cc
secondary-fixed-dim#008a92
on-secondary-fixed#000000
on-secondary-fixed-variant#1a4d52
tertiary-fixed#f5a623
tertiary-fixed-dim#d98a1a
on-tertiary-fixed#1a1400
on-tertiary-fixed-variant#3d2a0a
background#000000
on-background#ededed
surface-variant#454545

Typography

display
fontFamily: GeistPixel-Square, monospace · fontSize: 56px · fontWeight: 400 · lineHeight: 64px · letterSpacing: -0.01em
headline-lg
fontFamily: GeistPixel-Square, monospace · fontSize: 32px · fontWeight: 400 · lineHeight: 40px · letterSpacing: -0.01em
headline-md
fontFamily: Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: -0.02em
title-lg
fontFamily: Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif · fontSize: 20px · fontWeight: 600 · lineHeight: 28px · letterSpacing: 0em
body-lg
fontFamily: Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0em
body-md
fontFamily: Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
label-md
fontFamily: Geist, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif · fontSize: 14px · fontWeight: 600 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: Geist Mono, SFMono-Regular, Menlo, monospace · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.05em

Design guidance

Overview

React Email is a developer-centric design system built for transactional email components and code-first workflows. The brand embodies 'Technical Minimalism'—a philosophy that strips away decorative elements to expose pure functional design, where every pixel serves the developer's intent. The aesthetic is intentionally austere: pure black (#000000) backgrounds, high-contrast light text (#ededed), and surgical accent colors (hot pink #ffb1ee, electric cyan #00c4cc, warm gold #f5a623) that punctuate CTAs and interactive states. The UI evokes the precision of a terminal interface merged with modern component design, creating an environment where complex email logic feels approachable and modular.

The brand voice is direct, technical, and unapologetically developer-focused. Sentences are short, imperative, and action-oriented: 'Explore components. Build faster. Ship production-ready emails.' The vocabulary favors concrete terms (component, template, props, render) over marketing abstractions. Personality is confident without being arrogant—the system assumes the user is competent and values their time. Example sentence in brand voice: 'React Email gives you the component primitives; you control the output.'

Colors

The color system is built on a high-contrast dark foundation optimized for sustained developer focus and accessibility. Surface (#000000) and surface-container (#1a1a1a) form the base, with a carefully calibrated gray stack (surface-container-low #111111 through surface-container-highest #2e2e2e) providing subtle depth without visual noise. On-surface (#ededed) ensures WCAG AAA contrast (ratio 15.8:1) for body text, while on-surface-variant (#878787) is reserved for secondary information and disabled states.

Primary (#ffb1ee) is the brand's signature accent—a hot pink deployed exclusively on primary CTAs, active navigation states, and focus indicators. It appears in the 'Request private DESIGN.md' button and all interactive highlights, creating visual urgency without aggression. Secondary

Typography

The type system balances technical precision with readability through a dual-font strategy. Display and headline levels use GeistPixel-Square (a monospace pixel font) at 56px and 32px respectively, reinforcing the developer-tool aesthetic and creating visual hierarchy through geometric form rather than weight variation. Body text (Geist, 16px–18px, 400 weight, 24–28px line-height) prioritizes legibility at sustained reading distances, with generous line-height (1.5) to reduce eye strain during long coding sessions. Labels and UI text use Geist at 12–14px with letter-spacing of 0.01–0.05em to enhance scannability in dense component lists. Monospace (Geist Mono) is reserved for code snippets and technical metadata. Font weights are minimal: 400 for body, 500–600 for labels and buttons. Apply

Layout

The layout system uses a 12-column grid with a 1280px max-width container, centered on screens ≥2200px. Horizontal padding is 24px on desktop (lg breakpoint 64px+) and 16px on mobile, creating breathing room without excessive margins. Vertical rhythm is governed by the spacing scale: section separation uses lg spacing (40px), component internal padding uses md spacing (24px), and element-to-element gaps use sm spacing (12px). The gutter (24px) is applied consistently between grid columns and major content blocks. White-space is aggressive—empty space is treated as a design material, not wasted real estate. Cards and containers use 24px internal padding (md) with 12px gaps between child elements. The sticky header (height 68px) uses 12px backdrop blur and rgba(0, 0, 0, 0.85) background to m

Elevation & Depth

Depth is conveyed through a restrained shadow and backdrop-filter system that avoids the 'floating card' cliché. Level 1 (Base): no shadow; surface is the ground truth. Level 2 (Standard Card): box-shadow 0 4px 12px rgba(0, 0, 0, 0.4) with 1px solid border at {colors.outline} (#2e2e2e). Level 3 (Elevated/Modal): box-shadow 0 16px 40px rgba(0, 0, 0, 0.5) with backdrop-filter blur(12px) and rgba(0, 0, 0, 0.85) background. The header uses backdrop-filter blur(12px) with -webkit-backdrop-filter for cross-browser support, creating a frosted-glass effect that separates navigation from content withou

Shapes

The shape philosophy is 'Functional Geometry'—rounded corners are applied with surgical precision to guide visual flow without introducing softness. Buttons and interactive elements use rounded-md (0.75rem / 12px) to signal clickability while maintaining a technical edge. Cards and containers use rounded-lg (1rem / 16px) to create subtle visual separation. Input fields use rounded-DEFAULT (0.5rem / 8px) for a compact, utilitarian appearance. Badges and pills use rounded-full (9999px) to emphasize their role as discrete, self-contained labels. The header and modals use rounded-lg (1rem) at corn

Components

Action Elements Buttons are the primary interaction primitive. Button-primary uses {colors.primary} (#ffb1ee) background with {colors.on-primary} (#1a0a16) text, 16px padding horizontal, 44px height, and rounded-md (12px). On hover, shift background to #e89fd9 (primary-fixed-dim) with a 150ms cubic-bezier(0.4, 0, 0.2, 1) transition. Button-secondary is transparent with a 1px border at {colors.outline} (#2e2e2e), text color {colors.on-surface} (#ededed), and on hover shifts background to {colors.surface-container-high} (#292929) and text to {colors.primary}. Button-accent uses {colors.tertiary} (#f5a623) for promotional CTAs (e.g., 'Request a DESIGN.md analysis'); on hover, shift to #d98a1a. All buttons must have a minimum touch target of 44px height and 48px width. Apply focus-ring: 0

Do's and Don'ts

**Do**

  • Do use {colors.primary} (#ffb1ee) exclusively for primary CTAs and active states; it's the brand's signature accent and must never be diluted or overused.
  • Do maintain minimum 44px height and 48px width for all interactive elements to ensure touch accessibility on mobile devices.
  • Do apply backdrop-filter blur(12px) on sticky headers and modals to create visual separation without hard borders; always include -webkit-backdrop-filter for Safari support.
  • Do use GeistPixel-Square for display and headline levels to reinforce the developer-tool aesthetic; reserve Geist for body and UI text.
  • Do apply box-shadow 0 4px 12px rgba(0, 0, 0, 0.4) on cards and elevated surfaces; avoid drop-shadows on text.
  • Do use cubic-bezier(0.4, 0, 0.2, 1) timing function for all transitions; keep duration at 150ms for UI interactions and 300ms for page-level animations.

**Don't**

  • Don't use rounded-xl (1.5rem) or rounded-full on buttons or standard containers; reserve full rounding for badges and pills only.
  • Don't apply text-shadow on body text or large headlines; use it sparingly (0 1px 2px rgba(0, 0, 0, 0.3)) only on small labels over busy backgrounds.
  • Don't mix accent colors within a single CTA; if using {colors.tertiary} (#f5a623) for a button, don't add {colors.secondary} (#00c4cc) as a border or icon.
  • Don't use opacity below 0.5 for interactive elements; low opacity signals disabled state, not visual hierarchy.
  • Don't exceed 24px padding (md) on standard cards; excessive padding dilutes the technical aesthetic and wastes screen real estate.
  • Don't apply box-shadow to more than one elevation level simultaneously; use either shadow OR backdrop-filter, not both, to maintain visual clarity.