WhatsApp Design System Deep Dive
1. Brand Overview
WhatsApp’s visual language is exactly what you’d expect from a platform used by billions daily — stripped down, direct, and functional. No unnecessary flourishes. No visual noise. The site design is an extension of the app’s ethos: get in, communicate, get out.
The vibe is utilitarian but friendly. They rely heavily on their signature green (#25d366) as an accent, but the bulk of the interface sits in deep, muted dark tones (#111b21) and clean whites (#ffffff). This isn’t a “marketing-first” site with oversized imagery and dramatic typography — it’s a product-first environment. The design choices scream reliability and clarity.
The typography stack is Helvetica Neue with system fallbacks. Classic. This tells you they’re aiming for maximum legibility across devices without introducing font-loading delays. No custom font licensing, no Google Fonts. The result: predictable rendering everywhere.
Edges are mostly rounded — pill-shaped buttons, circular avatars, soft curves on images and sections. The border radius system is consistent, which keeps the UI feeling cohesive. Shadows are absent. Depth is communicated with borders and contrast rather than drop shadows.
The spacing scale is 8px-based but with some odd increments like 18px and 37px sprinkled in — probably legacy or visual tweaks. Breakpoints are numerous and precise (15+ breakpoints), which is unusual. This allows them to micro-adjust layouts at specific device widths rather than relying on a 3-tier responsive system. The result: cleaner alignment for an app that’s used on every device under the sun.
This design system is for people building a product that needs to work flawlessly for everyone, everywhere. WhatsApp’s choices are about stability and speed over visual experimentation. Every component is stripped to its essentials, which makes it easy to maintain consistency at scale.
2. Color System
2.1 Primary Colors
The hero color is #25d366 — a bright, almost neon green. It’s instantly recognizable as WhatsApp’s brand signal. Psychologically, green is associated with “go”, success, and positivity. It’s a smart pick for a messaging app — green means connection.
The primary dark tone is #111b21 — a deep charcoal that’s easy on the eyes. It’s the foundation for dark backgrounds, allowing white text to pop without the harshness of pure black.
White (#ffffff) is used liberally for text and surfaces. The contrast between white and #111b21 is strong enough for accessibility (WCAG AA+ for large text, AAA for most body text).
This palette is tiny — only three main colors. That’s deliberate. It reduces complexity and makes brand recognition immediate.
Competitor comparison: Facebook Messenger uses blues, Telegram uses light blues, Signal uses navy. WhatsApp’s green stands out in the crowded messaging space.
2.2 Complete Palette
| Color Name | Hex | Role | Usage |
|---|---|---|---|
| Brand Dark | #111b21 | Background / Text Dark | Page backgrounds, dark UI surfaces, dark text |
| White | #ffffff | Text / Background | Body text, cards, section backgrounds |
| Brand Green | #25d366 | Accent / CTA | Links on hover, accents, brand highlights |
2.3 Color Relationships
White (#ffffff) on Brand Dark (#111b21) — high contrast, easy readability.
Brand Green (#25d366) on Brand Dark — strong accent, draws attention to clickable elements.
Dark text (#111b21) on white — equally legible and neutral.
Accessibility: All primary text/background combinations pass WCAG AA. The green accent is bright enough to stand out against both white and dark backgrounds without strain.
Dark mode: The site is effectively in dark mode by default. Deep backgrounds, light text, pops of green.
2.4 Usage Guide
- Use Brand Green (#25d366) only for interactive elements or brand callouts. Avoid using it for large text blocks — too harsh.
- White (#ffffff) is the default for text over dark backgrounds. Keep white text crisp by pairing it with high-contrast dark tones.
- Brand Dark (#111b21) works as both background and text color in inverse contexts.
- Avoid muted grays — they’re absent in this palette. Stick to the three core colors.
3. Typography
3.1 Font Families
Two main stacks:
- Helvetica Neue, Helvetica, Arial — used for headings, links, captions.
- -apple-system, system-ui, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue — used for buttons and some headings.
No Google or Adobe Fonts. No variable fonts. This is pure system font strategy — maximum performance and reliability.
3.2 Type Scale
| Element | Font Family | Size | Weight | Line Height | Letter Spacing |
|---|---|---|---|---|---|
| heading-1 | Helvetica Neue | 80px (5rem) | 400 | 1.00 | -3.2px |
| heading-1 | Helvetica Neue | 60px (3.75rem) | 400 | 1.10 | -1.8px |
| heading-1 | Helvetica Neue | 24px (1.5rem) | 400 | 1.00 | -0.72px |
| link | Helvetica Neue | 18px (1.13rem) | 400 | 1.39 | -0.18px |
| heading-1 | Helvetica Neue | 18px (1.13rem) | 400 | 1.39 | -0.18px |
| link | Helvetica Neue | 16px (1rem) | 400 | 1.20 | |
| heading-1 | Helvetica Neue | 16px (1rem) | 400 | 1.20 | |
| heading-1 | -apple-system | 16px (1rem) | 500 | 1.20 | |
| button | -apple-system | 16px (1rem) | 400 | 1.38 | -0.16px |
| heading-1 | -apple-system | 16px (1rem) | 400 | 1.38 | -0.16px |
| heading-1 | Helvetica Neue | 16px (1rem) | 400 | 1.38 | -0.16px |
| link | Helvetica Neue | 16px (1rem) | 400 | 1.38 | -0.16px |
| caption | Helvetica | 12px (0.75rem) | 400 | 1.34 | |
| caption | Helvetica | 12px (0.75rem) | 400 | 1.33 | -0.12px |
| caption | Helvetica Neue | 12px (0.75rem) | 400 | 1.33 | -0.12px |
| link | Helvetica Neue | 12px (0.75rem) | 400 | 1.34 | |
| caption | Helvetica Neue | 12px (0.75rem) | 400 | 1.33 | -0.12px |
| caption | Helvetica Neue | 12px (0.75rem) | 400 | 1.30 | -0.36px |
| caption | Helvetica Neue | 12px (0.75rem) | 400 | 1.20 |
3.3 Hierarchy
The jump from 80px H1 to 60px secondary heading is massive — clear emphasis on hero titles. The 24px size is the “mid-level” heading to break sections. Body and link text sits at 16–18px, ensuring readability on all devices. Captions at 12px are minimal but still legible thanks to high contrast.
Letter spacing is tight in large headings (-3.2px) — gives a compact, modern feel. Small captions occasionally use negative tracking (-0.36px) to avoid too much whitespace.
4. Spacing & Layout
4.1 Spacing Scale
Base: 8px scale, but with irregular additions.
| Value | rem | Count | Notes |
|---|---|---|---|
| 1px | 0.06rem | 6 | Hairline borders |
| 4px | 0.25rem | 2 | Icon spacing |
| 12px | 0.75rem | 482 | Default gap/padding |
| 16px | 1.00rem | 56 | Button padding |
| 18px | 1.13rem | 56 | Link padding |
| 20px | 1.25rem | 12 | Section gaps |
| 24px | 1.50rem | 14 | Card padding |
| 32px | 2.00rem | 10 | Large gaps |
| 37px | 2.31rem | 7 | Odd, maybe visual tweak |
| 45px | 2.81rem | 3 | Hero spacing |
| 56px | 3.50rem | 9 | Section spacing |
| 70px | 4.38rem | 1 | Hero margins |
| 80px | 5.00rem | 1 | Hero padding |
| 88px | 5.50rem | 2 | Large vertical gaps |
| 96px | 6.00rem | 1 | Max spacing |
4.2 Layout
Breakpoints:
319px, 400px, 500px, 639px, 640px, 767px, 768px, 770px, 800px, 801px, 1023px, 1024px, 1095px, 1096px, 1200px.
This is granular. They adapt layout at very specific widths — clearly tested against actual device dimensions.
5. Visual Elements
Border Radius
| Value | Count | Elements |
|---|---|---|
| 25px | 9 | a, img, section |
| 50px | 17 | link, listbox |
| 50% | 32 | span, social media icons |
The 50px radius is the pill shape for buttons and selects. 50% is for perfect circles (avatars, social icons).
Shadows
None. Flat design. Depth comes from borders and contrast.
Borders
Multiple combinations:
- 1px solid #ffffff — primary border for elements on dark backgrounds.
- 1px solid #1c1e21 — subtle dark borders.
- 1px solid rgba(17,27,33,0.2) — low-contrast separators.
- 2px solid #ffffff — high-contrast, used for selects.
- Variations with “none none solid” for bottom borders in lists.
6. Components
6.1 Buttons
No explicit button styles extracted beyond select-one input styles. The select acts like a pill button:
Default:
- Background: #111b21
- Color: #ffffff
- Border: 2px solid #ffffff
- Border Radius: 50px
- Padding: 16px 28px
- No shadow
- Outline: none
6.2 Links
Four variants:
-
Dark link:
- Default: #1c1e21, no underline
- Hover: underline, #ffffff
-
White link:
- Default: #ffffff, no underline
- Hover: underline, #ffffff
-
Dark brand link:
- Default: #111b21, no underline
- Hover: underline, #25d366
-
Blue link:
- Default: #0373e9, no underline
- Hover: underline, #ffffff
6.3 Forms
Select-one inputs styled as pill buttons with 50px radius, white borders, dark background. No focus state defined in extracted data.
6.4 Cards
No explicit card component extracted. Likely styled with background colors (#ffffff or #111b21) and spacing values from 24px to 32px.
7. Design Tokens
:root {
/* Colors */
--color-brand-dark: #111b21;
--color-white: #ffffff;
--color-brand-green: #25d366;
/* Typography */
--font-helvetica-neue: "Helvetica Neue", Helvetica, Arial;
--font-system: -apple-system, system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue";
/* Spacing */
--space-1: 1px;
--space-4: 4px;
--space-12: 12px;
--space-16: 16px;
--space-18: 18px;
--space-20: 20px;
--space-24: 24px;
--space-32: 32px;
--space-37: 37px;
--space-45: 45px;
--space-56: 56px;
--space-70: 70px;
--space-80: 80px;
--space-88: 88px;
--space-96: 96px;
/* Border Radius */
--radius-25: 25px;
--radius-50: 50px;
--radius-full: 50%;
/* Borders */
--border-1-white: 1px solid #ffffff;
--border-1-dark: 1px solid #1c1e21;
--border-1-dark-alpha20: 1px solid rgba(17, 27, 33, 0.2);
--border-2-white: 2px solid #ffffff;
}8. AI Coding Assistant Prompt
# WhatsApp Design System Specification
You are a WhatsApp design expert. Build UIs matching their visual language exactly.
## Brand Context
WhatsApp’s design is minimal, functional, and globally accessible. It uses a dark base, bright green accents, and clean white text. Typography is system-based for performance. Rounded elements dominate, with no shadows — depth comes from borders.
## Color Palette
- Brand Dark: #111b21 — Backgrounds, dark text
- White: #ffffff — Text on dark, backgrounds
- Brand Green: #25d366 — CTAs, link hover, accents
- Dark Link: #1c1e21 — Default link color
- Blue Link: #0373e9 — Special link variant
## Typography
Fonts:
- Headings & body: "Helvetica Neue", Helvetica, Arial
- Buttons/system UI: -apple-system, system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue"
Sizes:
| Level | Size | Weight | Line Height | Use |
| H1 large | 80px | 400 | 1.00 | Hero titles |
| H1 med | 60px | 400 | 1.10 | Section hero |
| H3 | 24px | 400 | 1.00 | Subsection |
| Body/link-lg | 18px | 400 | 1.39 | Navigation links |
| Body | 16px | 400 | 1.20–1.38 | UI text |
| Caption | 12px | 400 | 1.30–1.34 | Small notes |
## Spacing & Grid
Base: 8px grid.
Scale: 1px, 4px, 12px, 16px, 18px, 20px, 24px, 32px, 37px, 45px, 56px, 70px, 80px, 88px, 96px.
Use multiples for component padding, gaps, margins.
## Border Radius
- md: 25px — images, sections
- lg: 50px — pill buttons, selects
- full: 50% — avatars, social icons
## Shadows & Depth
Flat design—use borders, not shadows.
## Components
### Primary Button
```css
.btn-primary {
background-color: var(--color-brand-dark);
color: var(--color-white);
border: var(--border-2-white);
border-radius: var(--radius-50);
padding: var(--space-16) 28px;
font-family: var(--font-system);
font-size: 16px;
font-weight: 400;
}Link Variants
.link-dark { color: #1c1e21; text-decoration: none; }
.link-dark:hover { color: #ffffff; text-decoration: underline; }
.link-white { color: #ffffff; text-decoration: none; }
.link-white:hover { text-decoration: underline; }
.link-brand { color: #111b21; text-decoration: none; }
.link-brand:hover { color: #25d366; text-decoration: underline; }
.link-blue { color: #0373e9; text-decoration: none; }
.link-blue:hover { color: #ffffff; text-decoration: underline; }Input Select
.select-one {
background-color: #111b21;
color: #ffffff;
border: 2px solid #ffffff;
border-radius: 50px;
padding: 16px 28px;
}Layout & Responsive Rules
Breakpoints: 319px, 400px, 500px, 639px, 640px, 767px, 768px, 770px, 800px, 801px, 1023px, 1024px, 1095px, 1096px, 1200px.
Interaction Rules
- Transitions: 150ms ease for hover/focus state changes.
- Focus indicators: Use border or outline with high contrast color.
- Hover: Always add underline to links.
DO List
- Use ONLY #111b21, #ffffff, #25d366, #1c1e21, #0373e9.
- Maintain 8px grid spacing.
- Use Helvetica Neue for headings, system font for buttons.
- Keep corners rounded per radius tokens.
- Use borders for depth.
DON'T List
- Don't add shadows.
- Don't introduce new colors.
- Don't mix different corner styles in same component.
- Don't use non-system fonts.
- Don't reduce link hover contrast.
Code Examples
Primary Button:
.btn-primary {
background: #111b21;
color: #ffffff;
border: 2px solid #ffffff;
border-radius: 50px;
padding: 16px 28px;
}Card:
.card {
background: #ffffff;
border-radius: 25px;
padding: 24px;
border: 1px solid rgba(17,27,33,0.2);
}Input:
.input {
border: 1px solid #1c1e21;
border-radius: 50px;
padding: 16px;
background: #111b21;
color: #ffffff;
}
---
## 9. Summary
**TL;DR** — WhatsApp’s site design is lean: three core colors, system fonts, rounded shapes, no shadows. It’s built for clarity and consistency across billions of devices.
**Brand Keywords**:
- utilitarian-minimalist
- globally-accessible
- flat-rounded
- green-accented