Skip to content

Peloton Design System

Peloton's design system as a DESIGN.md file. Peloton Red #df1c2f, Inter 32px, 18 colors, 17 components. For React, Next.js, and AI tools.

Add shadcn.io to your AI agent. · Pro It installs blocks, icons and templates in your design system from a prompt, with Pro.

Set up MCP
Primary
#df1c2f
Typeface
Inter
Shape
Mixed
Base radius
6px
Colors
18
Type tokens
11
Components
17
Spacing values
8

About

About Peloton DESIGN.md

Curated by Dov Azencot · Updated May 13, 2026 · Source onepeloton.com (opens in a new tab)

Peloton's storefront is a hardware-commerce surface dressed as an editorial fitness brand. The chrome is almost entirely near-black `#181a1d` typography on a pure white canvas — 780 elements use the ink as text, 778 as borders — interrupted in only one place by a single Peloton Red `#df1c2f` voltage that lights the primary purchase CTA. Everything else on the page is photography of the Bike+, Tread, Row, and Guide, captioned by Inter at modest 14–18px sizes. The page reads less like a typical fitness site (which leans on colorful gradient banners and motion) and more like an appliance store that happens to sell hardware you sweat on.

This file packages Peloton's home page chrome as a DESIGN.md — Google Labs' open spec for machine-readable design tokens. Inside: 18 colors tokens with one brand voltage (`#df1c2f` Peloton Red), one near-black ink (`#181a1d`), and a six-step neutral ladder; 11 typography tiers all running Inter at sizes 12 through 48 and weights 300 through 600, with a `-0.2px` letter-spacing reserved for the 26–48px display row; six radii from 4px to a full pill plus an 8px / 12px spacing scale lifted directly from the 1440px viewport's most-used values; and 17 components ranging from `button-primary` and `button-secondary` through `nav-link`, `product-tile`, `footer-email-input`, and a financing banner.

Drop the file into Claude, Cursor, GitHub Copilot, or any agent that reads design tokens. The result is a React surface that looks like Peloton: ink-on-white body, a single red 28px pill anchoring purchase flow, Inter at five weights with display tightened by `-0.2px`, and product tiles framed by 6px corners rather than rounded cards. Use it as a reference for hardware storefronts where the photography sells and the chrome stays out of the way — or as a study in how a single accent token plus a single near-black can carry an entire commerce page without a second brand color.

What makes it distinct

5

  1. Single-voltage red`#df1c2f` shows up 4 times on the page yet carries every primary purchase CTA, never a chip, never a hairline
  2. Two-radius geometryprimary CTA sits at a 28px pill, every other interactive surface lands at a 6px corner (66 occurrences)
  3. Inter at five weights300/400/500/600 across 14 typography tiers, with a `-0.2px` letter-spacing reserved for the 32–48px display row
  4. Ink as canvas voltage`#181a1d` text fills 780 elements vs. `#df1c2f` red at 4, putting 99% of the chrome on near-black against pure white
  5. Hardware-first photographythe 1440px viewport stacks Bike, Tread, Row, Guide tiles edge-to-edge, with copy held under 18px so the product stays the loudest object

onepeloton.com

Live at onepeloton.com

A snapshot of the brand in production. Scroll the frame to see the whole page.

Peloton's website at onepeloton.com

Colors

18 colors

Peloton's system runs on #df1c2f as its primary voltage, used in 1 of 17 components. Type is set in Inter across 11 tokens from 12px to 48px, weights 300–600. Shape language is mixed across 17 components, blending pills, soft rounds, and squarer corners.

Brand & Accent

Sparing, CTA-only voltage · 1

Surface

Page and card backgrounds · 4

Text

Headlines, body, captions · 5

Borders & Hairlines

Dividers, outlines, rules · 1

Semantic

Status, errors, success, links · 2

Other

Specialty colors · 5

Typography

11 type tokens

Set in Inter across 11 tokens, from 12px to 48px, weights 300–600. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.

  • display-xl48px · weight 600 · lh 1.3 · tracking -0.2pxThe quick brown fox jumps over the lazy dog
  • display-lg32px · weight 600 · lh 1.3 · tracking -0.2pxThe quick brown fox jumps over the lazy dog
  • display-md26px · weight 600 · lh 1.3 · tracking -0.2pxThe quick brown fox jumps over the lazy dog
  • heading-md20px · weight 600 · lh 1The quick brown fox jumps over the lazy dog
  • heading-sm18px · weight 500 · lh 1.3The quick brown fox jumps over the lazy dog
  • body-lg16px · weight 400 · lh 1.5The quick brown fox jumps over the lazy dog
  • body-md14px · weight 400 · lh 1.43The quick brown fox jumps over the lazy dog
  • body-strong14px · weight 600 · lh 1.43The quick brown fox jumps over the lazy dog
  • caption12px · weight 400 · lh 1.33The quick brown fox jumps over the lazy dog
  • button-md16px · weight 500 · lh 1.3The quick brown fox jumps over the lazy dog
  • nav-link15px · weight 300 · lh 1.07The quick brown fox jumps over the lazy dog

Layout

Radii and spacing

7 corner radii and 8 spacing values. Shape language: mixed.

Radii

  • none0px
  • sm4px
  • md6px
  • lg12px
  • xl24px
  • pill28px
  • full9999px

Spacing

  • xxs4px
  • xs6px
  • sm8px
  • md12px
  • base16px
  • lg24px
  • xl40px
  • xxl48px

Components

17 components

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

  • Button Primary
    button-primaryButton Primary
  • Button Primary Hover
    button-primary-hoverButton Primary Hover
  • Button Secondary
    button-secondaryButton Secondary
  • Button Ghost
    button-ghostButton Ghost
  • Top Nav
    top-navTop Nav
  • Nav Link
    nav-linkNav Link
  • Hero Tile
    hero-tileHero Tile
  • Hero Heading
    hero-headingHero Heading
  • Financing Banner
    financing-bannerFinancing Banner
  • Product Tile
    product-tileProduct Tile
  • Product Tile Image
    product-tile-imageProduct Tile Image
  • Price Label
    price-labelPrice Label
  • Type here…
    text-inputText Input
  • Footer Email Input
    footer-email-inputFooter Email Input
  • Link Inline
    link-inlineLink Inline
  • Badge Promo
    badge-promoBadge Promo
  • Footer
    footerFooter

In use

The system, in use

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

Build something people actually use.

A short paragraph of marketing copy that previews how the brand's display tier and body tier read together. Two sentences is usually enough.

Get startedLearn more
Marketing heroHeadline, sub-copy, primary CTA — the universal homepage opener.

FAQ

Peloton design system FAQ

Common questions about Peloton's tokens, components, and how to use this DESIGN.md in your project.

Read next

Specs, directories, and component libraries that pair with this design system.

Use it

Use Peloton in your project

One machine-readable file. Drop it into Claude, Cursor, 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 Peloton.

  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 Peloton'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

Peloton's storefront chrome is built on a contradiction — the brand sells one of the most kinetic, motion-saturated experiences in consumer fitness, but the home page is almost entirely still: near-black #181a1d typography on a white canvas, photography of stationary hardware, and a single saturated red #df1c2f voltage that fires only on the four purchase CTAs. The kinetic energy lives in the product imagery and the video reel of class-in-session moments; the chrome stays out of the way.

Accent scarcity as discipline: Peloton uses #df1c2f exactly 4 times in the captured 1440×4500 surface, all as background fills on the Bike+, Tread, Row, and Guide primary CTAs. Where most fitness brands paint their entire chrome in gradients of red and orange — the category default since the Equinox-era SoulCycle moment — Peloton withholds. The red becomes a price-tag signal: if it is on the page, you are looking at a hardware buy moment. Body copy is #181a1d (780 text occurrences). Hairlines are #181a1d at low opacity (778 border occurrences). Secondary text drops to #65666a (411 occurrences). There is no third brand color.

Pill voltage vs. flat chrome: The system runs a two-radius geometry. The primary CTA — and only the primary CTA — uses a 28px full-pill ({rounded.pill}) at a 56px height. Every other interactive surface drops to a 6px corner ({rounded.md}, 66 occurrences in the extraction). The contrast is the visual lever that makes the red CTA escape the rest of the page without needing a shadow, glow, or scale jump. Unlike the convention of using a single radius across an entire surface for visual consistency, Peloton uses the radius switch itself as the hierarchy.

Colors

  • Peloton Red (#df1c2f) — frequency 4. Used as bg (3), border (1), text (0). The single brand voltage, reserved for primary purchase CTAs and financing flags; never appears on chrome, hairlines, or chips.
  • Ink (#181a1d) — frequency 1565. Used as text (780), border (778), bg (7). The load-bearing typography and hairline color across the entire storefront; carries roughly 99% of the readable surface.
  • Graphite (#65666a) — frequency 411. Used as text (204), border (205), bg (2). The secondary text and divider color, scoped to nav links, captions, and disclaimer copy.
  • Canvas (#ffffff) — frequency 180. Used as text (56), bg (35), border (56), gradient (33). Pure white is the page background and on-ink inverse text; the gradient column is where it fades into hero photography.
  • Stone (#a8acb1) — frequency 84. Used as border (9), text (9), gradient (66). The disabled-state border and the gradient fade color over product imagery.
  • Black (#000000) — frequency 58. Used as text (12), border (11), bg (2), gradient (33). Reserved for image scrim overlays and a small number of disclosure text rows; not interchangeable with #181a1d ink.
  • Ink-soft (#222529) — frequency 8. Used as text (4), border (4). A near-duplicate of ink used in card hairlines that need a one-step lift from the body ink.
  • Link-ink (#2d3748) — frequency 5. Used as text (3), border (2). The inline-link color in disclosure copy, lifted half a step warmer than the body ink.

The palette is structural with one brand exception. Ink at 1565 occurrences vs. red at 4 is the entire system — the red functions as scarce price signage, not as a category color. Where the cookie-overlay extraction surfaced #38a169 success green and #edf2f7 pale surface, those are Fides component defaults that leaked into the page, not Peloton brand tokens.

Typography

Inter runs the entire ladder — no second typeface. The weight strategy spans 300, 400, 500, and 600, with weight 700 deliberately absent. Display heads ({typography.display-xl} 48px / 600 with -0.2px tracking, {typography.display-lg} 32px, {typography.display-md} 26px) anchor the campaign tiles; the negative letter-spacing on this row is the only place tracking deviates from the default normal value. Headings ({typography.heading-md} 20px / 600 and {typography.heading-sm} 18px / 500) handle product card titles and section labels.

Body copy lands at three weight stops. {typography.body-lg} 16px / 400 (count 40 in the extraction) covers paragraph copy. {typography.body-md} 14px / 400 (count 32) handles cards, financing disclosures, and the footer. {typography.body-strong} 14px / 600 (count 5) marks price labels and emphasis runs. {typography.button-md} 16px / 500 is the primary CTA face. {typography.nav-link} 15px / 300 is the lightest stop on the page — a deliberate down-weight that lets the nav recede beneath the hero photography.

The absence of weight 700 is a discipline signal — Peloton trusts size and color, not bold weights, to build hierarchy.

Layout

The page stacks as a vertical column of edge-to-edge tiles inside a 1440px viewport. Spacing leans heavily on a 12 / 16 / 24 scale: 12px is the dominant token at 44 occurrences, followed by 10px (41), 6px (33), 16px (30), 24px (27), and 8px (15). Section dividers fall at 48px and 40px. The tile rhythm runs Bike, Tread, Row, Guide each in its own 560–640px tall band — photography centered, headline at 26–32px, two short body lines, and the red 28px pill CTA. Internal card padding lands at 0px 22px (the CTA's exact value, 9 occurrences) or 18px 24px (5 occurrences) for product tiles.

Elevation & Depth

Peloton uses zero drop shadows on chrome. Depth comes from three devices: photography weight (the hardware is rendered with its own studio lighting), surface contrast between the white page canvas and the occasional #181a1d financing band, and a single 1px ink hairline on cards and the top nav. The extraction returned 0 shadow occurrences on every color token. There is no neumorphic lift, no card glow, no hover elevation in the home-page capture.

Shapes

Two radii do all the work. {rounded.pill} 28px is exclusively the primary CTA shape — 56px tall, 280px wide, full red fill. {rounded.md} 6px (66 occurrences) is every other rounded surface: secondary buttons, product tiles, badges, the input field. The {rounded.lg} 12px appears in 2 places (likely the cookie modal). {rounded.sm} 4px (34 occurrences) is the input-field corner and the small badge. {rounded.full} is reserved for circular dots (13 occurrences at 50%). Square corners ({rounded.none} 0px) carry the financing banner and hero tile.

Components

  • button-primary — the red #df1c2f 28px pill, 56px tall, Inter 16/500 white. The only place the brand voltage appears.
  • button-primary-hover — collapses to #181a1d ink fill on hover, keeping the pill shape. The hover state desaturates intentionally.
  • button-secondary — #ffffff fill with #181a1d 1px hairline and 6px corners. Used for "Learn More" and category drill-in.
  • button-ghost — softer secondary with #e4e6e7 border, 40px tall. Used in dense nav and filter rows.
  • top-nav — 48px white bar with a 1px hairline bottom, Inter 15/300 nav links in #65666a. Recedes beneath the hero.
  • nav-link — the lightest typography stop on the page; weight 300 is what makes the nav read as quiet.
  • hero-tile — full-bleed #181a1d background with white display type and a single red pill. No rounded corner.
  • hero-heading — Inter 48/600 with -0.2px tracking, white on ink. The display ceiling.
  • financing-banner — full-width #181a1d band with 14px body and disclaimer footnotes, sitting above the hero.
  • product-tile — #ffffff 6px-corner card with a 1px hairline, holding a hardware photograph on {colors.canvas-soft} (#f5f7f9).
  • product-tile-image — the soft-gray photography surface; never #ffffff because the products are mostly black.
  • price-label — 14px/600 Inter, ink color. Pricing is typographic, not colored.
  • text-input / footer-email-input — 50px tall, 4px corner, #888b93 mute border, 14px Inter body.
  • link-inline — #2d3748 text in disclosure paragraphs, slightly warmer than body ink.
  • badge-promo — ink-on-ink badge with 6px corners for "New," "Refurbished," "Financing" pills.
  • footer — white background with #65666a graphite text, no top hairline beyond the section gap.

Do's and Don'ts

  • Do reserve #df1c2f for primary purchase CTAs only. The red works because it appears 4 times — not 40.
  • Do pair the 28px pill ({rounded.pill}) with the red fill and nothing else. The pill shape and the red voltage are a married pair.
  • Do use #181a1d ink for body text and 1px hairlines. Pure black #000000 is reserved for image scrim overlays.
  • Do drop to weight 300 on nav links — the lightness is what lets the hero photography hold attention.
  • Don't apply -0.2px letter-spacing to body or button copy. The tracking only fits sizes ≥26px; smaller text needs normal to stay readable.
  • Don't use #f5f7f9 canvas-soft as a page background — it is the product-tile image surface only, lifted half a step from white to let dark hardware silhouette.
  • Don't introduce a secondary brand color (orange, green, blue) to differentiate Bike vs. Tread vs. Row. Peloton uses the photography and the headline to differentiate, never a chip color.
  • Don't use #a8acb1 stone for body text — 9 of its 84 occurrences are text but the rest are gradient fades over imagery. Body copy belongs at #181a1d.
  • Don't wrap the red CTA in a shadow or glow. The extraction returned zero shadows on every color; depth here comes from typography weight, not lift.

Known Gaps

  • Configurator flow not captured — the color picker, accessory bundles, and financing slider on the per-product PDP are not in this spec.
  • Member app chrome excluded — workout library, leaderboards, profile, and live-class chrome live on a separate sub-domain and run a darker theme than the storefront documented here.
  • Dark mode and motion tokens absent — the home page captures a single light theme; the brand's app and class video chrome use a dark canvas that is not represented.
  • Cookie-consent overlay tokens excluded — the Fides consent component leaked four non-brand colors into the raw extraction (a dark slate link color, a pale surface, a GPC-applied green, and a GPC-overridden warning red); only the slate link survived in the token set as link-ink.

Healthcare & Wellness

More systems like this

More DESIGN.md files in Healthcare & Wellness.

Pricing

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.

Billed once a year in USD. Cancel anytime.

Individual

For personal projects & open source

$32instead of $49/mo

$389 billed yearly

  • How many people can use the license.Seats: 1 seat
  • Client work, SaaS products and anything you charge for.Commercial use: Personal & open source only
  • Production-ready React sections: hero, pricing, features, dashboards and more.Pro blocks: 6,000+ blocks
  • Complete multi-page sites you can ship as they are.Templates: All 14 templates
  • React icons from every major library, installable with one command.React icons: 294k+ icons
  • Presets that restyle every block, in light and dark.Themes: All 59 themes
  • Lets your AI editor search, preview and install blocks for you.MCP server: Basic usage
  • Priority requests are answered first.Support: Standard

Team

Most popular

For freelancers, agencies & startups

$66instead of $99/mo

$789 billed yearly · ≈ $13/dev/mo

Everything in Individual, plus

  • How many people can use the license.Seats: Up to 5 seats
  • Client work, SaaS products and anything you charge for.Commercial use: Included
  • Lets your AI editor search, preview and install blocks for you.MCP server: High usage
  • Priority requests are answered first.Support: Priority

Organization

For companies with larger teams

$132instead of $199/mo

$1,589 billed yearly

Everything in Team, plus

  • How many people can use the license.Seats: Unlimited seats
  • Lets your AI editor search, preview and install blocks for you.MCP server: Unlimited usage
  • Secure checkout via Stripe
  • Code lives in your repo
  • Keep what you've shipped if you cancel
  • License terms

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