coderef

Reddit

Reddit is the internet's self-described "front page" — and its design system, the Reddit Product Language (RPL), reflects exactly that: a platform built for content discovery at massive scale, where the design recedes so…
DownloadRaw
Reddit

Build with the Reddit look.

Palette, type and components from this DESIGN.md, applied to a sample hero.

Palette

At a glance

Theme
light
Typefaces
Noto Mono
Sections
11
Length
4,815 words

Add it to your project

Then prompt your agent

Design System · Reddit

Light and dark previews, tokens and a ready-to-use package, generated from this DESIGN.md. No AI involved: the same file always produces the same output.

Generating design system…

DESIGN.md

DownloadRaw
Design tokens (YAML front matter)
name: Reddit
colors:
  primary: '#FF4500'
  primary-interactive: '#D93900'
  primary-hover: '#AE2C00'
  brand-orangered: '#FF4500'
  alien-blue: '#1870F4'
  action-primary: '#0A449B'
  action-secondary: '#0A2F6C'
  downvote: '#6A5CFF'
  downvote-hover: '#523DFF'
  canvas: '#FFFFFF'
  canvas-weak: '#F6F8F9'
  canvas-container: '#EEF1F3'
  surface: '#E5EBEE'
  foreground-strong: '#181C1F'
  foreground: '#333D42'
  foreground-weak: '#5C6C74'
  on-primary: '#FFFFFF'
  link: '#115BCA'
  link-hover: '#0A449B'
  link-visited: '#9B00D4'
  divider: '#E5EBEE'
  success: '#008A10'
  error: '#BC0117'
  warning: '#B78800'
  dark-bg: '#2A3236'
typography:
  display-lg:
    fontSize: 24px
    fontWeight: 700
    lineHeight: 1.33
    use: Page/subreddit headings
  body-lg:
    fontSize: 18px
    fontWeight: 600
    lineHeight: 1.33
    use: Post titles (prominent)
  body:
    fontSize: 14px
    fontWeight: 400
    lineHeight: 1.5
    use: Body text, comments, descriptions
  body-sm:
    fontSize: 12px
    fontWeight: 400
    lineHeight: 1.5
    use: Metadata, upvote counts, timestamps
  label:
    fontSize: 14px
    fontWeight: 600
    lineHeight: 1
    use: Button labels, nav items
  label-sm:
    fontSize: 12px
    fontWeight: 600
    lineHeight: 1
    use: Badge labels, flair text
rounded:
  sm: 4px
  md: 8px
  lg: 16px
  full: 9999px
spacing:
  xs: 4
  sm: 8
  md: 12
  base: 16
  lg: 20
  xl: 24
  xxl: 32
  section: 48
components:
  button-primary:
    type: button
    backgroundColor: '#D93900'
    textColor: '#ffffff'
    rounded: 999px
    height: 40px
    padding: 0px 12px
    typography: 14px / 600
    hover: '#AE2C00'
    use: Log In / primary CTA — OrangeRed pill
  button-secondary:
    type: button
    backgroundColor: '#E5EBEE'
    textColor: '#000000'
    rounded: 999px
    height: 40px
    padding: 0px 12px
    typography: 14px / 600
    hover: '#DBE4E9'
    use: Sign Up / secondary action
  button-outlined:
    type: button
    backgroundColor: transparent
    textColor: '#181C1F'
    border: 1px solid rgba(0,0,0,0.498)
    rounded: 999px
    height: 38px
    padding: 0px 11px
    typography: 14px / 600
    use: Create Post / ghost outlined action
  input-search:
    type: input
    backgroundColor: '#F8F8F8'
    border: 1px solid transparent
    rounded: 999px
    typography: 14px / 400
    focus: '#0A449B border'
    use: Global search bar
  post-card:
    type: card
    backgroundColor: '#FFFFFF'
    border: 1px solid rgba(0,0,0,0.2)
    rounded: 16px
    shadow: 0 0.0625rem 0.25rem 0 rgba(0,0,0,0.149)
    use: Post card in feed
  badge-flair:
    type: badge
    backgroundColor: '#E5EBEE'
    textColor: '#333D42'
    rounded: 9999px
    padding: 2px 8px
    typography: 12px / 600
    use: Post flair / subreddit flair
  upvote-tab:
    type: tab
    active: 'text #FF4500 + icon fill'
    textColor: '#5C6C74'
    use: Upvote/downvote indicator (active = OrangeRed)
  nav-item:
    type: tab
    textColor: '#333D42'
    active: '#181C1F font-weight 600'
    typography: 14px / 400
    use: Top navigation tabs (Best/Hot/New/Top)
  toggle-switch:
    type: toggle
    backgroundColor: '#0A449B'
    rounded: 9999px
    use: Settings toggle — alien blue when checked
  dialog-modal:
    type: dialog
    backgroundColor: '#FFFFFF'
    rounded: 16px
    shadow: 0px 2px 15px rgba(26, 26, 27, 0.3)
    use: Login/signup modal dialog
fonts:
  roles:
    sans: '-apple-system, system-ui, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif'
    mono: Noto Mono, monospace

Design System Inspiration of Reddit

Overview

Visual Theme & Atmosphere

Reddit is the internet’s self-described “front page” — and its design system, the Reddit Product Language (RPL), reflects exactly that: a platform built for content discovery at massive scale, where the design recedes so community-generated content can lead. The visual language is clean, functional, and deliberately neutral, punctuated by one unmistakable brand signature: OrangeRed (#FF4500), the color of the Snoo mascot’s body and the wordmark, which appears on upvote arrows, CTA buttons, and the iconic logo.

The 2023–2024 rebrand introduced Reddit Sans (a custom typeface family also released publicly), moved the system toward a rounded, friendly geometry, and shifted the primary interactive color from the raw logo orange to a slightly deeper burnt-orange (#D93900) that works better at interactive scale without washing out. The feed itself is radically content-forward: no gradients, no decorative shadows, minimal chrome. Post cards sit on a white canvas (#FFFFFF) with soft neutral borders, and every decorative element serves a functional purpose — the downvote blue-purple (#6A5CFF) is the only other saturated hue in the system, creating an intuitive upvote-orange / downvote-purple polarity that users internalize within seconds.

The RPL is built on semantic design tokens defined as CSS custom properties (e.g. --color-global-brand-orangered: #FF4500, --color-action-upvote: #D93900, --shreddit-color-wordmark: #FF4500). The web frontend ships via custom elements (shreddit-* web components), and the token system follows a role-based naming convention that clearly separates global palette constants from contextual semantic roles.

Key Characteristics:

  • OrangeRed (#FF4500) as the singular brand anchor — wordmark, logo, upvote icon active state, earned flair
  • Deeper burnt-orange (#D93900) as the interactive/CTA color — Log In button, upvote button fill, admin identity
  • Downvote blue-purple (#6A5CFF) as the semantic opposite — upvote polarity at a glance
  • Alien Blue (#1870F4) as the second brand accent — focus rings, switches, primary actions
  • System font stack — no custom web font for body; Reddit Sans available but body defaults to system
  • Full-pill geometry (999px / 9999px radius) dominates interactive elements — buttons, badges, inputs
  • Flat, near-shadowless feed — content cards use only subtle hairline borders and minimal drop shadows
  • Semantic token naming (--color-action-upvote, --color-action-downvote) — intentional polarity system

Primary tasks

  • Scan hundreds of post titles to find what is worth opening
  • Vote on a post and see the count change immediately
  • Follow a nested comment thread down through many levels of replies
  • Reach a specific answer by searching for the thread that holds it
  • Submit a post and land on the published post itself

Brand Narrative

Reddit was founded in 2005 by Steve Huffman (Ohanian’s college roommate and current CEO) and Alexis Ohanian, two 22-year-old University of Virginia graduates who pitched Y Combinator the idea of a “front page of the internet” — a link aggregator where users, not editors, decided what mattered. The original idea (proposed to Paul Graham as an “online ordering for food” concept) was redirected toward social news aggregation. Reddit was acquired by Condé Nast in 2006 for a reported $10–20M, operated under Condé Nast’s Advance Publications umbrella for years, and went public on the NYSE (ticker: RDDT) in March 2024 at a $6.4B valuation.

Reddit’s cultural influence vastly outweighs its revenue. The WallStreetBets subreddit orchestrated the 2021 GameStop short squeeze, demonstrating that coordinated community action on Reddit could move global financial markets. Reddit’s Ask Me Anything (AMA) format became a mainstream media genre — presidents, scientists, and celebrities treated a Reddit AMA as a cultural currency. The platform’s community-moderated structure (volunteer moderators “mods” control individual subreddits) is both its greatest strength and most persistent management challenge.

The 2023 API pricing controversy — which drove a mass subreddit blackout protest — illustrated the tension between Reddit’s community-ownership culture and its corporate imperatives as a public company. The eventual IPO in 2024 formalized that tension, with Reddit positioning user karma and contribution as a foundational differentiator against algorithmically-driven competitors.

What Reddit refuses: editorial curation replacing community voice, clean corporate aesthetics that feel out of place in a community context, and losing the nerd-internet authenticity that made it the “front page” in the first place. What it embraces: Snoo the mascot, OrangeRed as an icon-level color, the upvote/downvote mechanic as a democratic signal, and a design language that says “the content is what matters.”

Principles

  1. Community over curation. Algorithms assist; communities decide. UI implication: the design must never visually overshadow user-generated content — neutral colors, thin borders, and minimal chrome keep the post front and center.
  2. Vote polarity is a first-class UX primitive. The orange upvote / purple downvote is not decoration — it is the platform’s core engagement mechanic rendered in color. UI implication: #D93900 and #6A5CFF are reserved exclusively for vote states; using them elsewhere creates signal confusion.
  3. Identity is the subreddit, not the surface. Reddit’s product chrome is deliberately generic so each community can express its own personality through flair, banners, and custom themes. UI implication: platform-level UI components are neutral and modular; community theming sits on top.
  4. Density serves discovery. Reddit is a platform where users scan hundreds of titles in minutes. UI implication: compact card height, tight metadata, 12px timestamps — density is a feature, not a bug.
  5. Earn the orange. OrangeRed appears when something is earned (upvotes, awards) or acted upon (CTAs). It doesn’t decorate. UI implication: #FF4500 / #D93900 are state/action colors, not background colors for sections or illustrations.

Personas

Personas below are fictional archetypes informed by publicly observable Reddit user segments, not individual people.

Marcus Webb, 26, Chicago. /r/nba lurker and frequent commenter on sports threads. Opens Reddit before Twitter after any major game. Values the thread format — ten levels of nested debate in a way no other platform enables. Uses the app daily, votes obsessively, has strong opinions about which subreddits have “good mods.” Would notice immediately if Reddit changed the upvote button color.

Priya Nair, 32, Bengaluru. Senior software engineer who uses /r/cscareerquestions and /r/ExperiencedDevs for career signal and /r/LocalLLaMA for ML research tracking. Treats Reddit as a curated RSS that happens to have real humans attached. Uses old.reddit.com in a separate browser tab because she prefers information density over polish. Allergic to product redesigns.

Dani Kowalczyk, 19, Warsaw. Uses Reddit in English because the niche communities she’s interested in (vintage synthesizers, obscure film) are richer there than on any Polish-language platform. Has multiple accounts — one for gaming, one for music. Participates in AMA threads. Has bought products purely because /r/BuyItForLife recommended them.

Greg Thornton, 48, Nashville. Found Reddit during the pandemic through /r/DIY and /r/woodworking. Uses it almost exclusively through search (“reddit woodworking dovetail jig”) because direct navigation to the site feels chaotic. Has never posted, only comments. Has been lurking for four years. A classic “dark matter” Redditor.

Colors

Brand / Identity

  • OrangeRed (#FF4500): Signature brand color — Snoo mascot body color, logotype wordmark, upvote arrow active text/icon state. The single most recognizable hue in the system. CSS: --color-global-brand-orangered, --shreddit-color-wordmark.
  • Interactive OrangeRed (#D93900): The live CTA and upvote-fill color — slightly darker than the logo orange to improve contrast on white. CSS: --color-brand-background, --color-action-upvote, --color-upvote-background. Used for: Log In button background, upvote button active fill, admin identity badge.
  • OrangeRed Hover (#AE2C00): Darkened hover state for primary CTA and upvote elements. CSS: --color-brand-background-hover, --color-upvote-background-hover.

Interactive / Secondary Brand

  • Alien Blue (#1870F4): The secondary brand accent — focus rings, elevation-button-focus. CSS: --color-global-alienblue.
  • Action Primary (#0A449B): Primary action blue — switch checked state, primary button, link hover. CSS: --color-action-primary, --color-switch-input-background-checked, --color-primary-background.
  • Action Secondary (#0A2F6C): Deep navy — secondary action dark mode, button pressed state. CSS: --color-action-secondary.
  • Link Blue (#115BCA): Default hyperlink color. CSS: --color-primary, --color-a-default.
  • Link Hover (#0A449B): Link hover darkening. CSS: --color-a-hover, --color-primary-hover.
  • Link Visited (#9B00D4): Visited link purple. CSS: --color-a-visited.

Downvote

  • Downvote Purple (#6A5CFF): Downvote button active fill, semantic opposite of upvote orange. CSS: --color-action-downvote, --color-downvote-background.
  • Downvote Hover (#523DFF): Deeper purple on hover. CSS: --color-downvote-background-hover.

Neutral Surface

  • Canvas White (#FFFFFF): Page background, post cards, modal backgrounds. CSS: --color-neutral-background, --color-neutral-background-strong.
  • Surface Grey (#E5EBEE): Secondary surface — secondary buttons, switch track, selected states. CSS: --color-secondary-background, --color-neutral-background-canvas.
  • Faint Container (#F6F8F9): Hover backgrounds, input fields. CSS: --color-neutral-background-weak, --color-neutral-background-hover.
  • Container Strong (#EEF1F3): Card container backgrounds. CSS: --color-neutral-background-container-strong.
  • UI Canvas (#F2F2F2): App-level canvas behind content. CSS: --color-ui-canvas.
  • Dark Surface (#2A3236): Dark mode backgrounds, dark tooltip. CSS: --color-global-darkblue.

Text Hierarchy

  • Text Strong (#181C1F): Nav labels, strong headings, button labels. CSS: --color-neutral-content-strong.
  • Text Default (#333D42): Body copy, most UI text. CSS: --color-neutral-content.
  • Text Weak (#5C6C74): Metadata, timestamps, secondary labels, placeholder text. CSS: --color-neutral-content-weak, --color-label-default.
  • Divider (rgba(0,0,0,0.20)): Default borders and hairlines between posts. CSS: --color-neutral-border.

Status

  • Success (#008A10): Moderator badge, success banner. CSS: --color-success-background, --color-global-moderator.
  • Error (#BC0117): Error states, mods-filtered indicator text. CSS: --color-danger-content.
  • Warning (#B78800): Caution states, award gold color, stars. CSS: --color-global-gold, --color-global-stars.

Typography

Font Family

  • Primary / UI: System font stack — -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif. Reddit deployed a custom Reddit Sans typeface in 2023 (also open-sourced as applied-b* font-face variants in production CSS), but the body default remains the system stack for performance. Button-specific font uses an encoded font-face (applied-button-font-0).
  • Monospace: Noto Mono, monospace — used in code blocks and technical contexts.

Hierarchy

Role Size Weight Line Height Notes
Section heading 24px 700 1.33 Subreddit names, page titles
Post title (prominent) 18px 600 1.33 Featured/large card titles
Post title (standard) 16px 600 1.25 Standard feed post titles
Body / comments 14px 400 1.50 Default reading text
Metadata / timestamps 12px 400 1.50 Upvote counts, usernames, time
Button label 14px 600 1.00 Nav CTAs — Log In, Sign Up
Badge / flair 12px 600 1.00 Post flair, award labels

Principles

  • System stack first: Reddit prioritizes performance and native feel — no blocking web font for body text.
  • Weight 600 dominates interactive: Buttons, nav labels, and post titles all use weight 600 — creating clear interactive differentiation from body weight 400.
  • Pill-shaped font metrics: The 999px border-radius on buttons and inputs reinforces the “friendly pill” geometry; larger paddings on pill elements compensate for the reduced visual weight of the rounded edge.
  • 12px metadata density: The 12px / weight 400 tier handles the platform’s dense metadata layer (vote counts, comment counts, usernames, timestamps) without competing with post content.

Layout

Spacing System

  • Base unit: 4px
  • Scale: 4px, 8px, 12px, 16px, 20px, 24px, 32px, 48px
  • Notable: Post card internal padding 16px; subreddit/community sidebar 24px gaps; feed gutter varies by viewport

Grid & Container

  • Max content width: ~1200px; three-column layout (feed + sidebar + context panel on desktop)
  • Feed column: dominant (~60–65% width), sidebar ~30%
  • Full-bleed hero for subreddit headers (banner image)
  • Mobile: single-column, sidebar collapses into bottom sheet

Whitespace Philosophy

  • Content-forward minimalism: the design system stands back so community content takes center stage. Tight vertical rhythm between post cards (8–12px gap) maximizes information density.
  • Breathing room within cards: post card internals use generous 16px padding, but card-to-card spacing is compact.
  • Flat and fast: minimal decorative whitespace; every spacing decision serves information hierarchy.

Border Radius Scale

  • Sharp (4px): Inner chips, tooltips
  • Standard (8px): Form inputs, container cards
  • Relaxed (16px): Post cards, modal dialogs
  • Pill (999px): Buttons, search bar, flair badges
  • Full (9999px): Vote count pills, small badges

Responsive Behavior

Breakpoints

Name Width Key Changes
Mobile <640px Single column, sidebar hidden, compact nav
Tablet 640-1024px Two-column layout (feed + compact sidebar)
Desktop 1024-1280px Full three-column layout
Large Desktop >1280px Centered content with max-width ~1200px

Touch Targets

  • All primary buttons at 40px height — comfortably tappable
  • Small action pill buttons at 32px height (8px padding) — borderline on mobile, but aligns with platform density expectations
  • Upvote/downvote buttons: 32px × 32px minimum tap zone

Collapsing Strategy

  • Sidebar: three columns → two columns → hidden (accessed via bottom drawer on mobile)
  • Post title typography: scales from 18px on desktop to 16px on mobile
  • Navigation: horizontal full nav → condensed with overflow menu

Elevation & Depth

Level Treatment Use
Flat (Level 0) No shadow, transparent background Feed backgrounds, nav links
Hairline (Level 1) 1px solid rgba(0,0,0,0.20) border Post card borders, dividers
Raised (Level 2) elevation-sm: 0 0.0625rem 0.25rem rgba(0,0,0,0.149), 0 0.25rem 0.25rem rgba(0,0,0,0.149) Post cards
Floating (Level 3) elevation-md: 0 0.25rem 0.5rem rgba(0,0,0,0.102), 0 0.375rem 0.75rem rgba(0,0,0,0.251) Dropdowns, menus
Overlay (Level 4) boxshadow-modal: 0px 2px 15px rgba(26,26,27,0.3) + rgba(0,0,0,0.60) scrim Modal dialogs
Navigation boxshadow-navigation: 0px 4px 14px rgba(0,0,0,0.10) Sticky nav bar

Shadow Philosophy: Reddit uses neutral, dark-gray shadows throughout — no chromatic tinting. The shadow system is subtle and functional, emphasizing content lift rather than brand atmosphere. The scrim for modals is a deep rgba(0,0,0,0.60), communicating content lock without decorative effect.

Values kept in prose

Measured values the DESIGN.md token grammar cannot carry, kept verbatim:

  • shadow.sm: 0 0.0625rem 0.25rem 0 rgba(0,0,0,0.149), 0 0.25rem 0.25rem 0 rgba(0,0,0,0.149)
  • shadow.md: 0 0.25rem 0.5rem 0 rgba(0,0,0,0.102), 0 0.375rem 0.75rem 0 rgba(0,0,0,0.251)
  • shadow.modal: 0px 2px 15px rgba(26, 26, 27, 0.3)
  • shadow.nav: 0px 4px 14px rgba(0, 0, 0, 0.1)

Motion & Easing

Durations:

Token Value Use
motion-instant 0ms Vote state commits, focus ring appearance
motion-fast 100–150ms Button hover/active, icon state change
motion-standard 200ms Dropdown open, sheet slide-in, modal appear
motion-slow 300ms Page transitions, sidebar collapse

Easings:

Token Curve Use
ease-enter cubic-bezier(0.2, 0.6, 0.25, 1) Arriving — modals, dropdowns, drawers
ease-exit cubic-bezier(0.4, 0.0, 1, 1) Dismissals
ease-standard cubic-bezier(0.25, 0.1, 0.25, 1) Two-way transitions

Signature motions:

  1. Vote state flip. The upvote/downvote count and icon color transition is effectively instantaneous (≤100ms) — optimistic update is the mechanic, motion is barely perceptible. The semantic color change IS the feedback; animation would delay it.
  2. Feed post card hover. Subtle box-shadow intensification on hover (elevation-sm → elevation-md) with motion-fast ease. The shadow lift signals interactivity without moving the card.
  3. Sidebar drawer (mobile). Full-height drawer from the left edge at motion-standard / ease-enter. Communities list appears as a coherent panel, not individual items animating.
  4. Reduce motion. Under prefers-reduced-motion: reduce, all transitions collapse to instant state changes. Skeleton shimmer is replaced with a static #EEF1F3 fill. Vote counts update without transition. The product remains fully functional.

<!– OmD v0.1 Sources — Philosophy Layer (sections 10–15)

Tier 1 live inspect (2026-06-22) via playwright getComputedStyle on:

  • — headed Chrome, networkidle, full CSS custom properties scan (360+ color tokens)
  • — second subreddit surface, domcontentloaded, component inspection

Key token extractions (verified live):

  • –color-global-brand-orangered: #FF4500 (brand OrangeRed)
  • –shreddit-color-wordmark: #FF4500 (logo color confirmed)
  • –color-brand-background: #D93900 (interactive CTA fill)
  • –color-action-upvote: #D93900 (upvote active fill)
  • –color-action-downvote: #6A5CFF (downvote fill)
  • –color-global-alienblue: #1870F4 (focus ring / secondary accent)
  • –color-action-primary: #0A449B (primary interactive)
  • –color-a-default: #115BCA (link color)
  • –color-neutral-content: #333D42 (body text)
  • Log In button: rgb(217,57,0) = #D93900 (live computed style)
  • Sign Up button: rgb(229,235,238) = #E5EBEE (live computed style)
  • Body font stack: -apple-system, system-ui, Segoe UI, Roboto, Helvetica Neue, Arial
  • document.title: “Reddit - The heart of the internet”

RPL (Reddit Product Language) is Reddit’s internal design system. Not publicly documented at a URL — token names inferred from CSS custom property naming conventions in the live production CSS bundle.

Brand narrative: Reddit founding (2005), Steve Huffman + Alexis Ohanian, Y Combinator, Condé Nast acquisition (~2006), NYSE IPO March 2024 (RDDT), WallStreetBets/GameStop 2021 — widely documented public facts.

Personas are fictional archetypes informed by publicly observable Reddit user segments. Names are illustrative; they do not refer to real people.

All design values sourced from Tier 1 live inspection only. –>

Components

Buttons

Primary CTA (Log In)

  • Background: #D93900
  • Text: #ffffff
  • Radius: 999px
  • Height: 40px
  • Padding: 0px 12px
  • Font: 14px / 600
  • Hover: #AE2C00 background
  • Use: Primary auth CTA — “Log In” in nav

Secondary (Sign Up)

  • Background: #E5EBEE
  • Text: #000000
  • Radius: 999px
  • Height: 40px
  • Padding: 0px 12px
  • Font: 14px / 600
  • Hover: #DBE4E9 background
  • Use: Secondary auth CTA — “Sign Up” in nav

Outlined Ghost (Create Post)

  • Background: transparent
  • Text: #181C1F
  • Border: 1px solid rgba(0, 0, 0, 0.498)
  • Radius: 999px
  • Height: 38px
  • Padding: 0px 11px
  • Font: 14px / 600
  • Use: “Create Post” and other secondary ghost actions

Small Action Pill

  • Background: rgba(0, 0, 0, 0) (transparent)
  • Text: #181C1F
  • Radius: 999px
  • Height: 32px
  • Padding: 0px 9px
  • Font: 12px / 600
  • Use: Post action buttons (Share, Save, More)

Inputs

Search Bar

  • Background: #F8F8F8
  • Border: 1px solid transparent
  • Radius: 999px
  • Font: 14px / 400
  • Focus: #0A449B border
  • Text: #131313
  • Placeholder: #5C6C74
  • Use: Global site search in nav

Form Input (Bordered)

  • Background: #F6F8F9
  • Border: 1px solid transparent (default); #0A449B on focus
  • Radius: 8px
  • Font: 14px / 400
  • Text: #181C1F
  • Use: Login/signup form fields

Cards & Containers

Post Card (Feed)

  • Background: #FFFFFF
  • Border: 1px solid rgba(0, 0, 0, 0.20)
  • Radius: 16px
  • Shadow: 0 0.0625rem 0.25rem 0 rgba(0,0,0,0.149), 0 0.25rem 0.25rem 0 rgba(0,0,0,0.149)
  • Use: Individual post card in main feed

Container Card

  • Background: #EEF1F3
  • Radius: 8px
  • Use: Sidebar widgets, grouped content containers

Badges & Tags (Flair)

Default Flair

  • Background: #E5EBEE
  • Text: #333D42
  • Radius: 9999px
  • Padding: 2px 8px
  • Font: 12px / 600
  • Use: Post flair, subreddit flair, category tags

NSFW Badge

  • Background: rgba(222, 1, 159, 0.15)
  • Text: #DE019F
  • Radius: 9999px
  • Font: 12px / 600
  • Use: NSFW content label (--color-global-nsfw: #DE019F)

Spoiler Badge

  • Background: rgba(19, 19, 19, 0.15)
  • Text: #131313
  • Radius: 9999px
  • Font: 12px / 600
  • Use: Spoiler content label

Tabs

Sort Tab (Best / Hot / New / Top)

  • Text (inactive): #333D42
  • Text (active): #181C1F weight 600
  • Font: 14px / 400 (inactive), 14px / 600 (active)
  • Use: Feed sorting tabs below post composer

Upvote Indicator

  • Active (upvoted): OrangeRed text #FF4500 on upvote arrow; #D93900 on count
  • Active (downvoted): Purple #6A5CFF on downvote arrow
  • Inactive: Muted #5C6C74
  • Use: Upvote/downvote controls on each post — the polarity signal system

Toggles

Settings Toggle

  • Background (checked): #0A449B
  • Background (unchecked): #E5EBEE
  • Radius: 9999px
  • Handle: #FFFFFF
  • Use: Preferences and settings toggles

Dialogs

Login/Signup Modal

  • Background: #FFFFFF
  • Radius: 16px
  • Shadow: 0px 2px 15px rgba(26, 26, 27, 0.3)
  • Scrim: rgba(0, 0, 0, 0.60)
  • Use: Auth modal, post modals

States

State Treatment
Empty (new subreddit, no posts) Neutral canvas. Single-sentence prompt in #5C6C74 metadata tone: “Be the first to post here.” One orange CTA: “Create Post”. No illustration required.
Empty (search, no results) Direct explanation: “Hmm, your search returned no results. Try a different term.” No decorative empty state.
Loading (feed first paint) Skeleton cards at post-card dimensions — white #FFFFFF background, 16px radius, placeholder bars in #EEF1F3 at title/metadata positions. Shimmer at #00000008 opacity.
Loading (vote processing) Upvote count updates optimistically — count changes immediately, reverts on error. No blocking spinner.
Error (post failed to load) Inline error in the card position with a grey background: “Something went wrong. Try refreshing.” Retry CTA in default outlined style.
Error (form validation — login) Field-level. Red border (#BC0117 tone) on the input + 12px error text below: specific message (“Incorrect password”).
Error (rate limit / banned) Full-page error: direct, no-nonsense explanation. “You’ve been temporarily banned from /r/X.” Links to appeals process.
Success (post submitted) Brief confirmation: redirected to the new post. No celebratory toast — the post existing IS the confirmation.
Success (vote registered) Instant color change on the upvote/downvote arrow and count. No toast, no animation beyond the state flip.
Skeleton #EEF1F3 placeholder blocks at exact card dimensions, 8px radius on inner blocks, 16px on card wrapper. Subtle horizontal shimmer.
Disabled Button opacity reduced; OrangeRed interactive becomes rgba(217,57,0,0.3) (--color-upvote-background-disabled). Downvote disabled: rgba(106,92,255,0.3).
NSFW blur Post thumbnail blurred with rgba(0,0,0,0.6) overlay until user confirms age. Badge #DE019F visible above blur.

Do’s and Don’ts

Do

  • Use #FF4500 OrangeRed for the wordmark and logo — it is the brand’s single identity color
  • Use #D93900 for interactive CTAs and upvote fills — slightly darker for better contrast
  • Use full-pill geometry (999px radius) for all buttons, search inputs, and flair badges
  • Use #6A5CFF exclusively for downvote states — the orange/purple polarity is a core UX signal
  • Use #0A449B Alien Blue for focus rings, checkboxes, and switch toggles
  • Use semantic token names from the RPL — role-based naming (--color-action-upvote) over raw hex
  • Keep card backgrounds #FFFFFF with subtle hairline borders — no heavy shadows on content cards
  • Use weight 600 for button labels, nav items, and post titles to establish interaction hierarchy

Don’t

  • Use #FF4500 as a button fill for interactive states — it lacks contrast on white; use #D93900
  • Spread the OrangeRed to decorative elements — it means “upvote” and “action” in this system
  • Use the downvote purple (#6A5CFF) for non-voting contexts — it carries specific semantic meaning
  • Apply heavy box shadows to post cards — Reddit’s elevation is intentionally minimal
  • Use rectangular corners on buttons — the pill shape is a core identity element
  • Mix the orange and blue-purple as decorative gradients — they function as opposing signals
  • Use custom serif or display fonts — Reddit’s voice is system-native, not editorial
  • Apply high-saturation backgrounds to large surfaces — neutrals dominate; color is reserved for action

Voice & Tone

Reddit’s voice is irreverent, direct, community-owned, and proudly unpolished. The company tagline — “The heart of the internet” — captures the paradox: a platform with immense cultural influence that still feels like it belongs to the people who use it, not the corporation that runs it. Reddit’s product copy is sparse and functional; the real “voice” of Reddit is 100,000 communities (subreddits) each expressing their own personality. Reddit-as-platform stays out of the way and lets the community speak.

Context Tone
Nav/CTA labels Terse and direct: “Log In”, “Sign Up”, “Create Post”. No explanation.
Error messages Plain-English, often self-deprecating (“Hmm, that page doesn’t exist”).
Empty states Communal framing: “Be the first to comment.” Not “No content found.”
Onboarding Casual, interest-led: “What are you into?” — not “Complete your profile”.
Community rules Varies by subreddit; platform defaults to firm-but-clear.
Admin / mod messages Authoritative. Badge color #008A10 signals official status.
Marketing / ads Bold, internet-native, subversive — frequently riffs on Reddit culture itself.

Voice samples (characteristic Reddit product UI):

  • “The front page of the internet” — original tagline (brand heritage). (historically verified)
  • “Log In” / “Sign Up” — nav CTAs: shortest possible labels. (verified live 2026-06-22)
  • “Reddit - The heart of the internet” — current page title on homepage. (verified live 2026-06-22)

Forbidden register: corporate enthusiasm (“We’re excited to announce”), patronizing explanations, over-designed onboarding friction, buzzword marketing copy. Reddit’s community is sophisticated and allergic to inauthentic brand speak.

Agent Prompt Guide

Quick Color Reference

  • Brand / Logo: OrangeRed (#FF4500)
  • Primary CTA / Upvote active: Burnt Orange (#D93900)
  • CTA Hover: Dark Orange (#AE2C00)
  • Downvote active: Purple (#6A5CFF)
  • Link Blue: (#115BCA)
  • Focus ring / Switch: Alien Blue (#0A449B)
  • Background: White (#FFFFFF)
  • Card border: rgba(0,0,0,0.20)
  • Body text: Dark Teal (#333D42)
  • Metadata text: Slate (#5C6C74)
  • Surface: Light Blue-Grey (#E5EBEE)
  • Container: (#EEF1F3)

Example Component Prompts

  • “Create a Reddit-style Log In button: #D93900 background, white text, 999px radius, 40px height, 0px 12px padding, 14px / weight 600 system-ui. Hover: #AE2C00.”
  • “Design a Reddit post card: white #FFFFFF background, 16px radius, 1px solid rgba(0,0,0,0.20) border, minimal box-shadow 0 1px 4px rgba(0,0,0,0.15). Post title 18px / 600 / #181C1F. Metadata 12px / 400 / #5C6C74.”
  • “Build a flair badge: #E5EBEE background, #333D42 text, 9999px radius, 2px 8px padding, 12px / 600. For NSFW: #DE019F text with rgba(222,1,159,0.15) background.”
  • “Create upvote/downvote controls: upvote arrow icon in #D93900 when active / #5C6C74 inactive; vote count text #D93900 when upvoted; downvote arrow #6A5CFF when active.”
  • “Design a Reddit modal: white #FFFFFF background, 16px radius, 0px 2px 15px rgba(26,26,27,0.3) shadow, rgba(0,0,0,0.60) backdrop scrim.”

Iteration Guide

  1. The OrangeRed (#FF4500) is brand identity; the burnt orange (#D93900) is interactive/action
  2. Pill geometry (999px+) is non-negotiable for buttons and inputs — Reddit’s rounded language
  3. The orange/purple vote polarity (#D93900 upvote / #6A5CFF downvote) is a product UX primitive, not decorative
  4. Keep card borders thin and dark (rgba(0,0,0,0.20)) — no colored borders
  5. System font stack for body — no display fonts; weight 600 does the heavy lifting
  6. #333D42 is the default text color (not black) — warm, slightly blue-shifted
  7. Alien Blue #1870F4 / #0A449B is for focus accessibility and system state, not branding
  8. Post titles at 18px / 600 create enough hierarchy over 14px / 400 body without display sizes

Governance

Known Gaps

  • Contrast, button-outlined. Text #181c1f on #00000000 measures 1.22:1, below the WCAG AA 4.5:1 minimum for normal-size text. Recorded as measured, not adjusted.
All brands designs →

Brand names describe the visual style only; coderef is not affiliated with or endorsed by any brand listed. Licenses