ClickHouse Design System

High-performance SQL analytics · Void-black and electric-yellow contrast...
Back to Home
01

Visual Theme & Atmosphere

ClickHouse's marketing surface is the highest-contrast interface in the database / data-platform category. The base atmosphere is near-pure black canvas ({colors.canvas} — #0a0a0a) with electric yellow ({colors.primary} — #faff69) as the singular brand voltage. The yellow handles every primary CTA, every stat-callout number, every "GET STARTED" badge — used scarcely on individual elements but generously on full-bleed yellow CTA cards. White typography in confident weight-700 sans-serif anchors the editorial body.

The yellow + black pairing is what makes ClickHouse instantly recognizable. Where Snowflake uses cool blue gradients and Databricks uses red + slate, ClickHouse leans hard into one electric yellow that does all the brand work. Code blocks, terminal output, and product UI fragments embed directly in dark {colors.surface-card} (#1a1a1a) cards across every page.

...

Key Characteristics:

  • Near-pure black canvas ({colors.canvas} — #0a0a0a) with white type. The system has no light-mode marketing surface.
  • ...

Live Visual Theme Representation:

SELECT * FROM brand_philosophy LIMIT 1; // High Speed Analytics
02

Color Palette & Roles

Brand & Accent

  • Primary (Electric Yellow) ({colors.primary} — #faff69): The signature brand color. All primary CTA backgrounds, large stat-callout numbers, full-bleed yellow CTA cards. The yellow is the brand.
  • Primary Active ({colors.primary-active} — #e6eb52): Press / hover-darker variant.
  • ...

Surface

  • Canvas ({colors.canvas} — #0a0a0a): The default page floor. Near-pure black.
  • Surface Soft ({colors.surface-soft} — #121212): Section dividers, very-soft band tints.
  • ...

Text

  • Ink / On Dark ({colors.on-dark} — #ffffff): All headline and primary text.
  • Body ({colors.body} — #cccccc): Default running-text color.
  • ...

Semantic / Accent

  • Accent Emerald ({colors.accent-emerald} — #22c55e): Success states, "active" status indicators in product UI.
  • Accent Rose ({colors.accent-rose} — #ef4444): Error states, "down" indicators.
  • ...
primary
#faff69
primary-active
#e6eb52
primary-disabled
#3a3a1f
ink
#ffffff
body
#cccccc
body-strong
#e6e6e6
muted
#888888
muted-soft
#5a5a5a
hairline
#2a2a2a
hairline-strong
#3a3a3a
canvas
#0a0a0a
surface-soft
#121212
surface-card
#1a1a1a
surface-elevated
#242424
surface-yellow-band
#faff69
on-primary
#0a0a0a
on-dark
#ffffff
on-yellow
#0a0a0a
accent-emerald
#22c55e
accent-rose
#ef4444
accent-blue
#3b82f6
success
#22c55e
warning
#f59e0b
error
#ef4444
03

Typography Rules

Font Family

The system runs Inter for everything — display, body, navigation, buttons, captions. JetBrains Mono handles code blocks. The fallback stack walks -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif.

The single-family approach is deliberate: Inter at weight 700 + 600 + 400 covers the entire hierarchy without needing a serif or display counter-voice. The geometric humanist character of Inter at confident bold weight gives ClickHouse a precise, engineered feel that matches the database's performance-first positioning.

Hierarchy

TokenSizeWeightLine HeightLetter SpacingUse
..................

Principles

...

Note on Font Substitutes

Dynamic Preview:
display-xl size: 72px | weight: 700 | height: 1.05 | spacing: -2.5px
The quick brown fox jumps over the lazy dog
display-lg size: 56px | weight: 700 | height: 1.1 | spacing: -2px
The quick brown fox jumps over the lazy dog
display-md size: 40px | weight: 700 | height: 1.15 | spacing: -1.5px
The quick brown fox jumps over the lazy dog
display-sm size: 32px | weight: 700 | height: 1.2 | spacing: -1px
The quick brown fox jumps over the lazy dog
title-lg size: 24px | weight: 700 | height: 1.3 | spacing: -0.3px
The quick brown fox jumps over the lazy dog
title-md size: 18px | weight: 600 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
title-sm size: 16px | weight: 600 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
stat-display size: 56px | weight: 700 | height: 1.0 | spacing: -1.5px
The quick brown fox jumps over the lazy dog
body-md size: 16px | weight: 400 | height: 1.55 | spacing: 0
The quick brown fox jumps over the lazy dog
body-sm size: 14px | weight: 400 | height: 1.55 | spacing: 0
The quick brown fox jumps over the lazy dog
caption size: 13px | weight: 500 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
caption-uppercase size: 12px | weight: 600 | height: 1.4 | spacing: 1.5px
The quick brown fox jumps over the lazy dog
code size: 14px | weight: 400 | height: 1.55 | spacing: 0
The quick brown fox jumps over the lazy dog
button size: 14px | weight: 600 | height: 1 | spacing: 0
The quick brown fox jumps over the lazy dog
nav-link size: 14px | weight: 500 | height: 1.4 | spacing: 0
The quick brown fox jumps over the lazy dog
04

Layout Principles

Spacing System

  • Base unit: 4px.
  • Tokens: {spacing.xxs} 4px · {spacing.xs} 8px · {spacing.sm} 12px · {spacing.md} 16px · {spacing.lg} 24px · {spacing.xl} 32px · {spacing.xxl} 48px · {spacing.section} 96px.
  • ...

Grid & Container

  • Max content width: ~1280px centered.
  • Editorial body: Single 12-column grid; hero often uses 7/5 split (h1 left, code mockup right).
  • ...

Whitespace Philosophy

ClickHouse uses dense, slightly-compressed whitespace appropriate for a developer-tooling brand — generous enough to read editorially, tight enough to feel "engineering-grade" rather than "marketing-soft." Section rhythm at 96px is standard; card internal padding stays at 32px for feature cards.

Grid Layout Wireframe Mockup:

Grid Card 1
Grid Card 2
Grid Card 3
Layout Wireframe blueprint
1
2
3
4
5
6
7
8
9
10
11
12
Gutter spacing: 16px / 24px
Side Margins: 24px (Mobile) / 48px (Desktop)
Max Container Width: 1200px
05

Depth & Elevation

LevelTreatmentUse
.........
The system uses no drop shadows. Depth comes from the contrast between black canvas and {colors.surface-card} (a barely-lighter-than-canvas tone) — the contrast is subtle, more like an "engineering-grade dim panel" than an "elevated card."

Decorative Depth

  • Code-window cards carry their own internal product chrome — line numbers, syntax highlighting, status bars at the bottom — adding visual density without external shadows.
  • The yellow-on-black contrast does most of the elevation work for CTAs.

Elevation Level Showcase:

Glowing Elevation
ClickHouse elevates dark cards by using a subtle yellow glow effect (`rgba(250, 255, 105, 0.08)`).
Flat Surface (Level 0)

Used for background layers, sidebar headers, or baseline borders.

Low Elevation (Level 1 / Card)

Used for floating product elements, cards, and hover states.

High Elevation (Level 2 / Popover & Dropdown)

Used for modals, select menus, code editor tooltips, and overlay headers.

Border Radius & Shape Scale:

radius-sm 4px
radius-md 6px
radius-lg 8px
radius-pill Pill / Tag
06

Component Stylings

Border Radius Scale

TokenValueUse
.........

Top Navigation

top-nav — Black nav bar pinned to top. 64px tall, {colors.canvas} background. Carries the ClickHouse logo + wordmark at left, primary horizontal menu (Product, Use Cases, Pricing, Resources, Customers) center-left, right-side cluster with "Sign in" + "Get Started" {component.button-primary} (yellow). Menu items in {typography.nav-link} (Inter 14px / 500).

Buttons

button-primary — The signature yellow CTA. Background {colors.primary} (#faff69), text {colors.on-primary} (black), type {typography.button} (Inter 14px / 600), padding 12px × 20px, height 40px, rounded {rounded.md} (8px). The yellow + black combination is iconic.

button-secondary — Dark surface card button. Background {colors.surface-card}, text {colors.on-dark}, same shape as primary.

button-text-link — Inline text button, no background. Used for "Sign in" and inline link CTAs.

text-link — Inline body links in {colors.primary} (yellow on dark). Underlined.

button-icon-circular — 36 × 36 circular icon button on dark.

Cards & Containers

hero-band — Black-canvas hero with 7-5 grid: h1 + sub-headline + button row on the left, code-window or product mockup on the right. Vertical padding {spacing.section} (96px).

hero-stat-card — Yellow stat-display numbers ("779+", "47k+") inline on the canvas. No card surface — just yellow text in {typography.stat-display} (56px / 700).

feature-card-yellow — Full-bleed yellow card ("Built for every modern data challenge"). Background {colors.primary}, text {colors.on-yellow} (black), rounded {rounded.lg} (12px), padding {spacing.xl} (32px). The yellow card IS the visual emphasis.

feature-card-dark — Standard dark feature card. Background {colors.surface-card}, text {colors.on-dark}, rounded {rounded.lg}, padding {spacing.xl} (32px).

code-window-card — Dark card showing a SQL code block. Background {colors.surface-card}, code in JetBrains Mono with syntax highlighting, rounded {rounded.lg}, padding {spacing.lg} (24px). Often the hero's right-side artifact on developer-focused pages.

product-mockup-card — Card showing actual ClickHouse product UI (query editor, dashboard, monitoring panel). Same shape as {component.feature-card-dark} but with embedded product chrome inside.

pricing-tier-card — Standard tier card. Background {colors.surface-card}, rounded {rounded.lg}, padding {spacing.xl} (32px).

pricing-tier-card-featured — The featured tier flips to {colors.primary} (yellow). The yellow surface IS the featured signal.

stat-callout — Inline yellow stat numbers ("779+", "2.8k+", "47k+"). Transparent background, text {colors.primary}, type {typography.stat-display}. Used as a flat layout block, not a card with surface.

events-card — Used on /company/events. Dark card with event title, date in {typography.caption-uppercase}, location, and a "Register" CTA. Rounded {rounded.lg}, padding {spacing.lg}.

customer-logo-strip — Horizontal monochrome customer-logo strip. Background {colors.canvas}, logos in {colors.muted}, vertical padding {spacing.xl} (32px).

Inputs & Forms

text-input — Dark text input. Background {colors.surface-card}, text {colors.on-dark}, rounded {rounded.md} (8px), padding 10px × 14px, height 40px.

text-input-focused — Border thickens to {colors.primary} (yellow) for emphasis.

Tags / Badges

badge-pill — Small dark pill label. Background {colors.surface-card}, text {colors.on-dark}, type {typography.caption}, rounded {rounded.pill}.

badge-yellow — Yellow pill for "NEW", "GET STARTED" emphasis. Background {colors.primary}, text {colors.on-primary}, type {typography.caption-uppercase}, rounded {rounded.pill}.

Tab / Filter

category-tab + category-tab-active — Dark tab navigation. Inactive: transparent + muted text. Active: surface-card background + on-dark text. Padding 8px × 14px, rounded {rounded.md}.

CTA / Footer

cta-band-yellow — A pre-footer "Deploy your way" CTA band. Full yellow fill, black type, rounded {rounded.lg}, padding 64px. Carries an h2 in {typography.display-md} and a CTA — usually a black-button on the yellow surface.

footer — Black footer that closes every page. Background {colors.canvas}, text {colors.muted}. 4-column link list at desktop covering Product / Use Cases / Resources / Company. Vertical padding 64px. The ClickHouse wordmark sits at the top in {colors.on-dark}.

Interactive Component Demonstrations:

07

Do's and Don'ts

Do

  • Anchor every page on the black canvas. The yellow + black pairing is the brand voltage.
  • Reserve {colors.primary} (yellow) for primary CTAs, stat-callout numbers, and full-bleed yellow CTA bands. The yellow's scarcity at the element level + abundance at the band level is what makes it powerful.
  • Use Inter at weight 700 for every display headline, with -1 to -2.5px letter-spacing.
  • Show actual SQL code blocks inside {component.code-window-card} — ClickHouse is a database; show the query, don't paint marketing illustrations of queries.
  • Use {component.stat-callout} numbers to establish credibility (community size, contributors, performance benchmarks). The yellow stat numbers are signature.
  • Anchor every band with {spacing.section} (96px) vertical rhythm.

Don't

  • Don't introduce a second brand color. ClickHouse is monochromatic + yellow.
  • Don't bold display weight beyond 700 or use weight 500 for headlines. The hierarchy depends on size, not on weight gradation.
  • Don't use yellow for body text or large surface fills outside of intentional yellow cards.
  • Don't use rounded buttons / pills outside of small badges. The standard button radius is 8px (md).
  • Don't repeat the same surface mode in two consecutive bands. Black canvas → dark feature card → yellow CTA card → black canvas → code-window card.
  • Don't replace SQL code mockups with abstract illustrations. The code IS the marketing voltage.
  • Don't add hover state styling beyond what the system already encodes.
✅ Recommended / Do
  • Anchor every page on the black canvas. The yellow + black pairing is the brand voltage.
  • Reserve {colors.primary} (yellow) for primary CTAs, stat-callout numbers, and full-bleed yellow CTA bands. The yellow's scarcity at the element level + abundance at the band level is what makes it powerful.
  • Use Inter at weight 700 for every display headline, with -1 to -2.5px letter-spacing.
  • Show actual SQL code blocks inside {component.code-window-card} — ClickHouse is a database; show the query, don't paint marketing illustrations of queries.
  • Use {component.stat-callout} numbers to establish credibility (community size, contributors, performance benchmarks). The yellow stat numbers are signature.
  • Anchor every band with {spacing.section} (96px) vertical rhythm.
❌ Discouraged / Don't
  • Don't introduce a second brand color. ClickHouse is monochromatic + yellow.
  • Don't bold display weight beyond 700 or use weight 500 for headlines. The hierarchy depends on size, not on weight gradation.
  • Don't use yellow for body text or large surface fills outside of intentional yellow cards.
  • Don't use rounded buttons / pills outside of small badges. The standard button radius is 8px (md).
  • Don't repeat the same surface mode in two consecutive bands. Black canvas → dark feature card → yellow CTA card → black canvas → code-window card.
  • Don't replace SQL code mockups with abstract illustrations. The code IS the marketing voltage.
  • Don't add hover state styling beyond what the system already encodes.
08

Responsive Behavior

Breakpoints

NameWidthKey Changes
.........

Touch Targets

  • {component.button-primary} at minimum 40 × 40px.
  • {component.button-icon-circular} at exactly 36 × 36 — slightly under WCAG 44, visually centered.
  • ...

Collapsing Strategy

  • Top nav collapses to hamburger at < 768px.
  • Hero 7-5 grid → single-column on mobile.
  • ...

Image Behavior

  • Code blocks inside dark mockups stay at fixed font-size; horizontal scroll on mobile rather than wrapping.
  • Customer logos in monochrome strip retain native widths; row wraps on mobile.

Responsive Adaptation Note:

📱 Mobile scaling drops card counts to 1-column layout and wraps wide query tables into scroll containers.
Interactive Viewport Simulator
Width: 800px (Desktop Mode) Grid Container
Primary Column

Adjusts layout width

Secondary Column

Folds on viewport change

Sidebar Column

Stacks to bottom on mobile

09

Agent Prompt Guide

1. Focus on ONE component at a time. Reference its YAML key ({component.code-window-card}, {component.pricing-tier-card-featured}). 2. Variants of an existing component (-active, -disabled, -focused) live as separate entries.

  • ...

Copyable Agent Integration Prompt:

"Build a high-performance DB console mockup: void black base (#0a0a0a), electric yellow actions (#faff69), and monospace tables."
10

Full System Design Tokens

The parsed design tokens extracted from the core stylesheet of this design system:

Design TokenHex ValueSystem Palette Role
--primary#faff69System color representation for primary
--primary-active#e6eb52System color representation for primary-active
--primary-disabled#3a3a1fSystem color representation for primary-disabled
--ink#ffffffSystem color representation for ink
--body#ccccccSystem color representation for body
--body-strong#e6e6e6System color representation for body-strong
--muted#888888System color representation for muted
--muted-soft#5a5a5aSystem color representation for muted-soft
--hairline#2a2a2aSystem color representation for hairline
--hairline-strong#3a3a3aSystem color representation for hairline-strong
--canvas#0a0a0aSystem color representation for canvas
--surface-soft#121212System color representation for surface-soft
--surface-card#1a1a1aSystem color representation for surface-card
--surface-elevated#242424System color representation for surface-elevated
--surface-yellow-band#faff69System color representation for surface-yellow-band
--on-primary#0a0a0aSystem color representation for on-primary
--on-dark#ffffffSystem color representation for on-dark
--on-yellow#0a0a0aSystem color representation for on-yellow
--accent-emerald#22c55eSystem color representation for accent-emerald
--accent-rose#ef4444System color representation for accent-rose
--accent-blue#3b82f6System color representation for accent-blue
--success#22c55eSystem color representation for success
--warning#f59e0bSystem color representation for warning
--error#ef4444System color representation for error