Skip to content

Peacock Design System

Peacock's streaming look as a DESIGN.md: pure black canvas, white Peacock Sans headlines with thin sublines and a cyan link accent, for React and AI tools.

Primary color
#069de0
Typeface
peacocksans
Shape
Sharp
Base radius
0px
Colors
4
Type tokens
9
Components
14
Spacing values
6

About Peacock DESIGN.md

Curated by Dov Azencot, updated May 18, 2026. Source peacocktv.com (opens in a new tab).

Peacock's captured surface is the geo-blocked unavailability page — what NBCUniversal serves when a non-US viewer hits peacocktv.com without a US IP. The marketing hero is hidden behind that gate, so what the extractor sees is the system reduced to its skeleton: a pure black canvas, the white Peacock wordmark with the six-feather column of brand-colored dots beside it (yellow, red, purple, blue, blue, green from top to bottom), a 40px Peacocksans bold headline, and a 20px hair-weight-100 sub-line directly beneath it. There are no cards, no rounded surfaces, no gradient, no second background tone. The page is the brand identity standing alone.

The DESIGN.md file packages that skeleton into a machine-readable spec. Inside: 4 colors tokens centered on pure-black canvas and pure-white ink, with a single cyan link voltage and a soft gray for secondary text; 9 typography tokens running Peacocksans (NBCUniversal's custom proprietary sans) at four sizes in three weights — the 100 / 700 weight pair on the same family is the system's signature; 6 spacing values from 2px to 72px; no declared corner radius (the captured page has zero rounded objects); and 14 components definitions covering the wordmark, the headline-and-sub-line stack, the inline cyan link, the muted-gray copyright footer, and the placeholder structural components the live marketing surface would carry.

Feed this file to Claude or Cursor and it reproduces Peacock's specific moves: pure-black canvas with no charcoal warmth, Peacocksans across every tier, the weight-100 / weight-700 contrast on the same family rather than across two families, cyan as the only accent, and the multicolor feather mark beside the wordmark as the page's single splash of brand color. One honest framing: the captured spec is the brand identity at rest. The live US-market hero carries the streaming acquisition surface (autoplay tiles, plan picker, content rails) that this DESIGN.md does not represent — what it represents is the chrome that survives when everything else is stripped away.

What makes it distinct

5 highlights

  1. Pure black canvas#000000 carries 70 of the captured surface elements, with no charcoal lift or near-black warmth
  2. Peacocksans across every tierDisplay, sub-line, body, and footer all share one custom proprietary sans family
  3. Weight 100 beside weight 700The 20px sub-line at hair-weight pairs against the 40px bold headline as the system's signature contrast
  4. Cyan link voltage#069de0 appears only as inline link color, the single chromatic accent on an otherwise monochrome page
  5. Multicolor feather markThe wordmark's six-dot column (yellow / red / purple / blue / green) is the only color above the fold; the rest of the system is grayscale

Live at peacocktv.com

Peacock in production, as captured. Scroll the window to see the whole page.

Peacock's website at peacocktv.com

4 colors

Peacock's system runs on #069de0 as its primary voltage, used in 1 of 14 components. Type is set in peacocksans across 9 tokens from 12px to 40px, weights 100–700. Shape language is sharp — components average 0px corner radius, favoring crisp rectangles.

Surface

Page and card backgrounds · 1

Text

Headlines, body, captions · 3

9 type tokens

Set in peacocksans across 9 tokens, from 12px to 40px, weights 100–700. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.

  • display-lg40px · weight 700 · lh 48pxThe quick brown fox jumps over the lazy dog
  • sub-line20px · weight 100 · lh 28pxThe quick brown fox jumps over the lazy dog
  • heading-md18px · weight 700 · lh 24pxThe quick brown fox jumps over the lazy dog
  • body-md16px · weight 400 · lh 22pxThe quick brown fox jumps over the lazy dog
  • body-sm14px · weight 400 · lh 20pxThe quick brown fox jumps over the lazy dog
  • link-md18px · weight 700 · lh 24pxThe quick brown fox jumps over the lazy dog
  • footer-md16px · weight 400 · lh 22pxThe quick brown fox jumps over the lazy dog
  • label-md16px · weight 700 · lh 22pxThe quick brown fox jumps over the lazy dog
  • caption12px · weight 400 · lh 16pxThe quick brown fox jumps over the lazy dog

Radii and spacing

1 corner radii and 6 spacing values. Shape language: sharp, on a 0px base radius.

Radii1

  • none0px

Spacing6

  • xxs2px
  • sm8px
  • base16px
  • md16px
  • lg40px
  • xl72px

14 components

Each rendered from its tokens (color, type, radius, padding) on Peacock's own canvas.

  • Brand Mark
    Brand Markbrand-mark
  • Hero Stack
    Hero Stackhero-stack
  • Hero Heading
    Hero Headinghero-heading
  • Sub Line
    Sub Linesub-line
  • Body Paragraph
    Body Paragraphbody-paragraph
  • Body Paragraph Muted
    Body Paragraph Mutedbody-paragraph-muted
  • Inline Link
    Inline Linkinline-link
  • Footer Row
    Footer Rowfooter-row
  • Button Primary
    Button Primarybutton-primary
  • Button Secondary
    Button Secondarybutton-secondary
  • Top Nav
    Top Navtop-nav
  • Nav Link
    Nav Linknav-link
  • Type here…
    Text Inputtext-input
  • Card
    Cardcard

The system, in use

Peacock's tokens on the kind of product it builds.

Marketing heroThe homepage: its nav, a headline and the main call to action.
Peacock
Sign up

Everything you love to watch and hear

Millions of songs, shows and podcasts, ready on every screen you own.

Start listeningView plans
PeacockJ
AllHomeBrowseLibraryPremium
Made for youSee all
Daily MixDaily MixMade for youLate Night JazzLate Night JazzPlaylistMorning RunMorning Run128 BPMNew FindsNew FindsUpdated weeklyDeep FocusDeep FocusPlaylist
Editorial articleA story page: the masthead, the headline and the opening.
PeacockSubscribe
WorldPoliticsBusinessScienceCulture
Climate

The cities racing to adapt before the next flood

Coastal planners are rewriting the rules for how and where we build. Not everyone agrees on who should pay for it.

Peacock staff · 12 min read

We are designing for water we have not seen yet. The people who build the places we live are starting to plan for decades, not seasons, and the work is already changing what gets made.

Peacock design system FAQ

Peacock's tokens, its components and how to use this DESIGN.md in your project.

What are the color tokens in the Peacock DESIGN.md?

Peacock's DESIGN.md has 4 color tokens: canvas (#000000), ink (#ffffff), ink-muted (#a4a5a7) and link (#069de0). Every value is a quoted hex you can copy.

What is Peacock's primary color hex code?

The color token `link` is #069de0, used by 1 component. The surface behind it is `canvas` (#000000).

How do I use Peacock's colors in Tailwind CSS?

Map the tokens to your CSS variables: `link` (#069de0) to `--primary`, `canvas` (#000000) to `--background`, `ink` (#ffffff) to `--foreground`. shadcn/ui's Tailwind setup maps them to classes such as `bg-primary` and `text-foreground`, so they then use Peacock's palette.

What is Peacock's primary brand color?

Peacock does not have a single brand voltage in the conventional sense — the brand identity is the multicolor six-dot feather column beside the wordmark, drawn from the network's peacock-feather palette of yellow, red, purple, blue, and green. On the captured chrome the only declared structural accent is a cyan link color (#069de0), which appears as the inline tone for the Privacy Policy link. Pure black (#000000) carries the canvas and 70 of the page's element occurrences; pure white (#ffffff) carries the wordmark and body text. The multicolor feather lives inside the wordmark SVG and is not exposed as a CSS variable, so it is not tokenizable in the spec — described in prose only.

Use Peacock in your project

One machine-readable file. Drop it into Claude Code, Cursor, VS Code or any AI tool that reads DESIGN.md.

Download DESIGN.md
  1. Download the DESIGN.md

    One machine-readable file: every color, type, radius, spacing, and component token of Peacock.

  2. Feed it to your AI tool

    Drop it into Claude, Cursor, or GitHub Copilot. The agent writes React components and Tailwind classes that match Peacock's visual language.

  3. Reference the tokens directly

    Or paste the values into your Tailwind config, CSS variables, or component library: every color, size and radius is a quoted, ready-to-copy value.

Read the full DESIGN.md overview, rationale, do’s and don’ts

Overview

Peacock's captured surface is the geo-blocked unavailability page, and that constraint shapes everything you see. Brand-identity-at-rest. Where Netflix's region-block still shows a marketing hero and Disney+ serves a content sampler, Peacock strips the page to its skeleton: a pure black canvas ({colors.canvas} — #000000), the white wordmark with the six-feather column of brand-colored dots beside it (yellow, red, purple, blue, blue, green from top to bottom), a 40px Peacocksans bold headline ("For US customers:"), a 20px hair-weight-100 sub-line directly beneath ("Your device must physically be located in the US to stream."), and a cyan inline link to the privacy policy. The page is the brand identity standing alone — there are no cards, no rounded objects, no gradient, no second background tone.

The typographic signature is weight 100 beside weight 700 on the same family. Where Stripe pairs Sohne-var at weight 300 with itself at weight 400, and where most consumer brands pair a heavy display sans against a serif body, Peacock takes the contrast inside one family: 700 Peacocksans bold for the headline, 100 Peacocksans thin for the sub-line directly beneath. Both lines sit on the same baseline grid with no spacing variation. The hair weight at 20px against the 40px bold creates the only typographic tension on the page, and the absence of a second family keeps the contrast disciplined. NBCUniversal commissioned Peacocksans specifically for this kind of weight-range work; the family supports the full 100–900 axis.

Color discipline is severe. The page renders four declared structural values: {colors.canvas} pure black for the floor, {colors.ink} pure white for the wordmark and text, {colors.ink-muted} (#a4a5a7) for the copyright footer, and {colors.link} cyan (#069de0) for the single inline link. The multicolor feather column inside the wordmark — yellow, red, purple, blue, green — is the only chromatic moment above the fold, and it lives inside the brand-mark SVG rather than as a CSS variable. Outside the wordmark there is no color in the system.

Key Characteristics:

  • Pure black canvas ({colors.canvas} — #000000) — 70 of the captured element occurrences, with no charcoal lift or near-black warmth, the absolute zero of the grayscale.
  • Peacocksans across every tier — display, sub-line, body, link, and footer all share one custom proprietary NBCUniversal sans, with no second family.
  • Weight 100 beside weight 700 — the 20px hair-weight sub-line and 40px bold headline form the system's signature typographic contrast, both on the same family.
  • Cyan link voltage ({colors.link} — #069de0) — appears only as inline link color, the single chromatic accent outside the wordmark SVG.
  • Multicolor six-feather wordmark — the only splash of brand color above the fold; lives inside the brand-mark image as yellow / red / purple / blue / green dots beside the "peacock" wordmark.
  • Muted gray ({colors.ink-muted} — #a4a5a7) reserved for the legal-footer copyright row — the only secondary text tone in the system.
  • No corner radius declared anywhere on the captured surface — the page has zero rounded objects (no cards, no buttons, no input fields, no chips).
  • 16px base spacing with 40 / 72px section padding — five declared spacing values cover the entire page, no smaller unit than 2px.

Colors

Canvas

  • Canvas ({colors.canvas} — #000000): frequency 70. Used as text (34), border (34), background (2). The dominant value across every measured surface — the page floor, every text-inside-text-shadow, every border outline. Absolute zero with no warmth, no lift; the system commits to pure black rather than the slightly-blue near-blacks Linear or Vercel use.

Ink

  • Ink ({colors.ink} — #ffffff): frequency 15. Used as text (7), border (7), background (1). The wordmark fill, the 40px headline, the 20px sub-line, the body paragraph color. Pure white on pure black; no muted variant for body copy, no off-white for warmth. The contrast is uncompromising.
  • Ink Muted ({colors.ink-muted} — #a4a5a7): frequency 6. Used as text (3), border (3). The neutral gray reserved for the copyright row in the footer ("Peacock © Peacock TV LLC. A Division of NBCUniversal…"). Not used anywhere as a body or label tone above the footer — it is purely the legal-text tier.

Accent

  • Link ({colors.link} — #069de0): frequency 4. Used as text (2), border (2). The cyan inline link color for the "Privacy Policy" link sitting between the sub-line and the copyright footer. The only chromatic structural value in the system; appears nowhere else on the captured surface. Note: this is not the brand-feather palette — those colors live inside the wordmark SVG rather than as declared CSS values.

Notes on the Multicolor Feather

The wordmark beside "peacock" carries a six-dot vertical column drawn from NBCUniversal's peacock-feather palette: a warm yellow at the top, then red, then two purples, a saturated blue, and a green at the bottom. These hues are the brand identity but are not exposed as CSS custom properties on the captured chrome — they live inside the wordmark SVG as fill values. The DESIGN.md spec therefore cannot tokenize them; they are described here in prose only. If you need them in a build, sample directly from the SVG.

Typography

Font Family

The system runs Peacocksans for every tier — a custom proprietary sans NBCUniversal commissioned for the streaming brand. The fallback stack walks Helvetica, Arial, sans-serif. There is no second family — no serif tier, no monospace, no display alternate. Three weights do the work: 100 (hair-weight) for sub-lines beneath bold headlines, 400 for body and footer copy, and 700 for display headlines and link text. The 100 / 700 contrast on the same family rather than across two families is the system's most distinct typographic move.

Hierarchy

TokenSizeWeightLine HeightUse
{typography.display-lg}40px70048pxBold headline ("For US customers:" / "For other international audiences:")
{typography.sub-line}20px10028pxHair-weight sub-line directly beneath the headline
{typography.heading-md}18px70024pxReserved h3 / sub-section heading tier
{typography.body-md}16px40022pxDefault running text
{typography.body-sm}14px40020pxTighter body for caption rows
{typography.link-md}18px70024pxInline link tone (Privacy Policy)
{typography.footer-md}16px40022pxCopyright row in the footer
{typography.label-md}16px70022pxReserved bold-label tier for buttons / chips
{typography.caption}12px40016pxSmallest text tier — reserved

Principles

The display sits at 40px / 700 with a 48px line-height — generous leading that gives the bold headline air. The sub-line directly below jumps weight from 700 to 100 while dropping from 40px to 20px; the contrast is double — half the size and one-seventh of the weight. The pairing reads as one typographic unit rather than two stacked sentences, and the hair weight makes the sub-line feel like an annotation rather than a continuation.

There is no italic, no uppercase, no all-caps tracking, no display-serif alternate. Weight is the entire typographic toolkit, and the 100 / 700 range on Peacocksans is what carries the contrast across every hierarchy step.

Note on Font Substitutes

Peacocksans is a custom NBCUniversal commission and is not publicly licensable. The closest open-source substitute is Inter at weights 100 / 400 / 700; the proportions transfer cleanly and Inter's variable axis supports the hair-weight tier without the thinning artifacts cheaper sans families show at weight 100. Roboto Thin is a viable alternative for the 20px sub-line specifically if Inter Thin feels too narrow. Avoid Helvetica Neue Ultra Light for the sub-line — at 20px it disappears against the black canvas.

Layout

Spacing System

  • Base unit: 16px — the workhorse value, appearing four times in the captured page across header padding, sub-line gap, and footer padding.
  • Tokens: {spacing.xxs} 2px · {spacing.sm} 8px · {spacing.base} 16px · {spacing.md} 16px (same value, semantic alias) · {spacing.lg} 40px · {spacing.xl} 72px.
  • Section padding: 40px vertical · 72px horizontal on the hero block — the wide horizontal gutter keeps the centered wordmark and headline anchored to a constrained inner column.
  • Wordmark-to-headline gap: the centered wordmark sits roughly 80px above the 40px headline; the sub-line immediately follows the headline with no additional vertical gap beyond the line-height rhythm.
  • Headline-to-sub-line gap: the sub-line is tight against the headline — the 48px headline line-height plus the 28px sub-line line-height stack without an additional spacing token, which produces the "one typographic unit" effect.

Grid & Container

  • Hero canvas: full-bleed {colors.canvas} black with content centered horizontally — the wordmark, headline, sub-line, and link all share the same horizontal center.
  • Wordmark width: ~400px centered above the headline stack.
  • Text column: the headline-and-sub-line block constrains to roughly the same width as the wordmark above it, holding the page on a single vertical axis.
  • Footer: the copyright row sits left-aligned at the very bottom of the canvas, 16px from the page edges, separated from the hero stack by a single vertical gap.

Rhythm

The page is one centered vertical column from top to bottom — wordmark, two headline-and-sub-line pairs, the inline cyan link, and the muted-gray copyright row. There are no horizontal sections, no two-column layouts, no card decks, no rails. The rhythm comes entirely from vertical whitespace and the weight-100 / weight-700 contrast between headline and sub-line.

Elevation

The system has no shadow tier on the captured surface. Zero shadow occurrences were measured. The page is uniformly flat — pure black canvas, white text, cyan link, gray footer. There is nothing to elevate because there are no surfaces above the canvas: every text element sits directly on {colors.canvas} with no card, panel, or chip to lift.

  • Flat (no shadow): every surface — wordmark, headline, sub-line, link, footer.
  • Tonal lift: absent — there is only one background color ({colors.canvas}) on the page; no surface ladder exists.
  • Hairlines: the captured chrome shows no visible border outlines except the inline link underline (which is a text-decoration rather than a border).

The absence of an elevation tier is deliberate for the captured surface. The live US-market streaming hero would carry rounded content tiles with subtle elevation, but those surfaces are not represented in this spec.

Shapes

The radius scale is absent. The captured surface has zero rounded objects: no buttons, no cards, no input fields, no chips, no avatars. The spec declares a single {rounded.none} token (0px) as a placeholder for components that might be added when the live US-market surface is captured. There is no sm / md / lg ladder because the page has no rounded surfaces to land them on.

If you build a button or card around this DESIGN.md, the default radius is 0 — Peacock's identity at rest is hard-cornered. The live streaming product likely carries rounded content tiles, but those values are not present in the captured chrome and have not been invented.

Components

brand-mark — The Peacock wordmark plus the multicolor six-dot feather column, white-on-black, centered above the hero stack. Approximately 120px tall. The six dots beside the wordmark carry the only chromatic moment above the fold (yellow / red / purple / blue / blue / green).

hero-stack — Container for the headline-and-sub-line pair on the {colors.canvas} floor, 40×72 padding. Holds two stacks ("For US customers:" / "Your device must physically be located in the US to stream." and "For other international audiences:" / "Peacock is not yet available in your territory.").

hero-heading — White text at {typography.display-lg} (40px / 700 / 48px line-height). The bold half of the weight-100 / weight-700 pair.

sub-line — White text at {typography.sub-line} (20px / 100 / 28px). The hair-weight half of the pair, directly beneath the headline with no additional spacing token between them.

body-paragraph — Default white running-text at {typography.body-md} (16px / 400). Reserved tier — does not appear on the captured surface but available for body-copy contexts.

body-paragraph-muted — Gray {colors.ink-muted} variant at the same size. Reserved tier for secondary running text.

inline-link — Cyan {colors.link} (#069de0) text at {typography.link-md} (18px / 700), 2px vertical padding. The Privacy Policy link sitting between the sub-line block and the copyright footer.

footer-row — Gray {colors.ink-muted} text at {typography.footer-md} (16px / 400), 16px padding. The copyright line at the bottom of the canvas ("Peacock © Peacock TV LLC. A Division of NBCUniversal. All other programs and/or marks are the property of their respective owners. All rights reserved.").

button-primary — White {colors.ink} fill, black text, 0 radius, 16px padding, 48px height. Reserved component — does not appear on the captured surface but available for primary CTAs.

button-secondary — Transparent fill, white text, 1px {colors.ink-muted} border, 0 radius, 16px padding, 48px height. Reserved.

top-nav — Black {colors.canvas} surface, 64px height, 16px padding. Reserved — the captured page has no top nav.

nav-link — White text at {typography.link-md}, 8×16 padding. Reserved for the live marketing surface's top-nav links.

text-input — Black fill, white text, 1px {colors.ink-muted} border, 0 radius, 16px padding, 48px height. Reserved for form contexts.

card — Black fill, white text, 1px {colors.ink-muted} border, 16px padding. Reserved for content-card contexts on the live marketing surface.

Do's and Don'ts

Do keep the canvas at pure #000000. Peacock's identity-at-rest commits to absolute black with no charcoal warmth — softening to a near-black would dilute the contrast against the white wordmark and undercut the system's grayscale severity.

Do pair {typography.display-lg} (40px / 700) directly with {typography.sub-line} (20px / 100) on the same family. The weight-100 / weight-700 contrast on Peacocksans (rather than across two families) is the system's distinct typographic move; substituting a serif sub-line breaks the signature.

Do reserve the cyan link color ({colors.link} — #069de0) for inline links only. It is the single declared chromatic accent on the captured surface; spreading it onto button fills, borders, or chips dilutes the only structural color on the page.

Do use {colors.ink-muted} (#a4a5a7) only at the legal-footer tier. The captured chrome reserves the mid-gray for the copyright row alone; promoting it to body or label text breaks the page's two-text-color discipline.

Don't soften the canvas from {colors.canvas} toward a slightly-blue near-black (the Linear / Vercel move). The Peacock brand-mark is engineered for true black; against any charcoal floor the wordmark's contrast drops by a measurable step and the multicolor feather mark loses saturation.

Don't thicken the sub-line weight from 100 toward 300 or 400 to "improve legibility." The hair weight is structural — at 20px / 100 the sub-line reads as annotation beneath the 40px / 700 headline. Bumping to 400 collapses the pair into one undifferentiated stack and the signature contrast disappears.

Don't introduce a corner radius greater than 0 on this captured chrome. The system has zero rounded objects above the fold; adding even an 8px radius to a button below the headline would import a softness the page deliberately refuses.

Don't treat the multicolor feather hues (yellow / red / purple / blue / green) as a tokenizable accent palette. They live inside the wordmark SVG and are not exposed as CSS variables on the captured surface — using them as button fills or text accents extracts them from the single context (the wordmark) where they read as brand identity rather than as decoration.

Known Gaps

  • The captured surface is the geo-block page: Peacock restricts peacocktv.com to US IPs only. The unavailability page is what this DESIGN.md describes; the live US-market hero with autoplay tiles, plan picker, and content rails is not represented.
  • Multicolor feather hues are not tokenized: the yellow / red / purple / blue / green dots inside the wordmark are SVG fill values rather than CSS custom properties on the captured chrome, so the spec describes them in prose only.
  • No declared corner radius: the captured page has zero rounded objects, so no radius scale is declared. The live streaming product likely carries rounded content tiles but those values cannot be measured from the visible chrome.
  • No declared shadow or elevation tier: every captured surface sits directly on the black canvas with no panel or card above it. Hover, focus, and disabled states are not exposed.
  • No declared form components: the captured page has no input fields, no buttons, no chips. The button / input / card definitions in this spec are placeholder reserved tokens, not measured values.
  • Live US-market chrome: the streaming-acquisition surface (plan picker, content rails, sub-brand tiles for Bravo / NBC / Telemundo) is hidden behind the geo-block and not captured here. Treat this DESIGN.md as the brand identity at rest rather than the full marketing surface.
  • Sub-brand chrome: Peacock aggregates content from NBC, Bravo, USA, E!, Syfy, Telemundo, and Universal Pictures, each with its own color palette and type system. None of those sub-brand surfaces are captured here; the spec is the master Peacock chrome only.

Build it with Pro

The DESIGN.md files are free. Pro adds 6,000+ blocks, premium templates and the MCP server, so your AI editor builds in your system for you.

4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.

  • Secure checkout via Stripe
  • Code lives in your repo
  • Keep what you've shipped if you cancel
  • License terms

4.9 out of 5 from 150+ developers

Your system, built for you

Every block, template and icon, installed by your AI agent in your design system. The DESIGN.md files stay free.

Get Pro
  • Cancel anytime
  • Keep what you've shipped