A live page in this style is not built yet — the CSS variables and the prompt below are enough to reproduce it.
At a glance
Vercel, in one page
Vercel is a developer-platform brand — the page is a deployment dashboard's marketing surface, written for engineers who already know the syntax. It earns that posture with one of the cleanest stark systems on the web: near-white {colors.canvas-soft} body background, ink-near-black {colors.ink} text, a 200-step gray scale that gives every divider, border, and disabled state its own deliberate step. The only place the brand introduces colour at marketing scale is the multi-stop mesh gradient ({colors.gradient-develop-start} → {colors.gradient-preview-end} → {colors.gradient-ship-start} → cyan / magenta / amber) that floats in atmospheric backdrops, never miniaturised to a swatch. That gradient is the entire decoration system.
Type is the second decisive voice. The brand's own custom geometric sans (Geist) carries display, body, button — everything narrative — at weight 600 for display, 500 for buttons, 400 for body. A matching monospaced face (Geist Mono) carries technical labels: terminal mockups, code blocks, sometimes filename captions. Headlines are sentence-case with aggressive negative letter-spacing (-2.4px at 48 px hero) — the brand never letter-spaces positively, never goes uppercase outside of mono labels.
Surfaces use a four-step ladder: {colors.canvas} (pure white for cards), {colors.canvas-soft} 98% (the page body), {colors.canvas-soft-2} 95% (occasional inset region), {colors.primary} (the deep ink-near-black used as the polarity-flipped band when a section needs the dark mode treatment). Shadows are exceptionally subtle — every elevated card carries a stacked shadow built from 0px 1px 1px #00000005 + 0px 2px 2px #0000000a + an inset border. Cards never float on heavy drop-shadow; they sit on the page held by hairline + soft glow.
Key Characteristics:
- A single black-ink primary CTA
{colors.primary}carries every conversion target, paired with white-on-whitebutton-secondaryfor the secondary action. The brand uses 100 px pill shape for marketing CTAs and a tight 6 px square shape for in-app nav buttons. - A multi-stop mesh gradient (cyan-blue-magenta-amber) is the only decorative chrome — used at hero scale and inside feature-band atmospheric backdrops. It is the brand.
- Every section eyebrow and small label uses the monospace face
{typography.caption-mono}or{typography.code}; everything else is in the geometric sans. - Subtle stacked-shadow elevation — three offsets layered with 4-12 % black opacity — never a single heavy drop-shadow.
- A complete 100–1000 gray + blue + red + amber + green + teal + purple + pink colour scale exists as a system token set, but the marketing surface uses only the
100,1000, and700-level tones; the rest stay in the design-system tokens for in-product surfaces. - An "Active CPU" pricing rhythm:
pricing-cardlays out 3-up on the pricing page withpricing-card-featured(Pro tier) polarity-flipped to{colors.primary}against white-card siblings.
Do's and don'ts
Do
- Reserve
{colors.primary}(#171717) for primary CTAs across the page. Black ink IS the conversion target. - Use
{rounded.pill}100 px for every marketing-scale CTA and{rounded.sm}6 px for nav-scale buttons. The two pill scales coexist deliberately. - Set every headline in
{typography.display-*}weight 600, sentence-case, often period-terminated. Aggressive negative tracking is part of the voice. - Use the brand mesh gradient as atmospheric decoration at hero scale only — never miniaturise it to an icon, never reduce to a single colour.
- Layer stacked shadows (multiple small offsets with inset hairline) rather than single heavy drops. The brand's elevation is calmer than Material.
- Cycle page surfaces in
{colors.canvas-soft}→{colors.canvas}→{colors.primary}polarity-flipped bands; the dark band IS the depth cue. - Set every code block and technical eyebrow in
{typography.code}/{typography.caption-mono}. Mono is the voice of the platform.
Don't
- Don't introduce a sixth accent colour. The brand operates with ink + gray + the four-pair gradient palette; new accents flatten the voice.
- Don't render headlines in all-caps. Sentence-case + negative tracking is non-negotiable.
- Don't drop a single heavy drop-shadow on cards. The brand's elevation is built from stacked small offsets + inset hairline rings.
- Don't render the brand gradient at icon scale or in a single-colour reduced form. The gradient lives at hero scale only.
- Don't promote the geometric sans to weight 700. The brand's display ceiling is 600.
- Don't pair the marketing 100-px pill CTA shape with the 6-px nav radius on the same screen — pick a scale and stay there.
- Don't set body paragraphs in the mono face. The mono is for code + technical labels only.
Copy this into your AI builder
Paste it as-is. Every value below was measured from the original site, not guessed.
Assembled from the measured tokens — the source document has no prompt block.
Build a page in the Vercel design language. Follow the measured tokens below — do not substitute your own palette.
Colors:
- primary: #171717
- on-primary: #ffffff
- ink: #171717
- body: #4d4d4d
- mute: #888888
- hairline: #ebebeb
- hairline-strong: #a1a1a1
- canvas: #ffffff
- canvas-soft: #fafafa
- canvas-soft-2: #f5f5f5
Type:
- families: Geist, Inter, -apple-system, Geist Mono
- scale: 12, 13, 14, 16, 18, 20, 24, 28, 32
- weights: 400, 500, 600
Shape:
- radius: 0, 4, 6, 8, 12, 16, 64, 100
- elevation: `ex-toast` — Toast notification surface — feature-card shape + medium shadow.
Spacing: 4, 8, 12, 16, 24, 32, 40, 48, 64, 96
Rules:
- Reserve `{colors.primary}` (`#171717`) for primary CTAs across the page. Black ink IS the conversion target.
- Use `{rounded.pill}` 100 px for every marketing-scale CTA and `{rounded.sm}` 6 px for nav-scale buttons. The two pill scales coexist deliberately.
- Set every headline in `{typography.display-*}` weight 600, sentence-case, often period-terminated. Aggressive negative tracking is part of the voice.
- Use the brand mesh gradient as atmospheric decoration at hero scale only — never miniaturise it to an icon, never reduce to a single colour.
- Layer stacked shadows (multiple small offsets with inset hairline) rather than single heavy drops. The brand's elevation is calmer than Material.
- Cycle page surfaces in `{colors.canvas-soft}` → `{colors.canvas}` → `{colors.primary}` polarity-flipped bands; the dark band IS the depth cue.
Avoid:
- Don't introduce a sixth accent colour. The brand operates with ink + gray + the four-pair gradient palette; new accents flatten the voice.
- Don't render headlines in all-caps. Sentence-case + negative tracking is non-negotiable.
- Don't drop a single heavy drop-shadow on cards. The brand's elevation is built from stacked small offsets + inset hairline rings.
- Don't render the brand gradient at icon scale or in a single-colour reduced form. The gradient lives at hero scale only.
- Don't promote the geometric sans to weight 700. The brand's display ceiling is 600.
- Don't pair the marketing 100-px pill CTA shape with the 6-px nav radius on the same screen — pick a scale and stay there.
Keep every value literal. If a token is given, use that exact value.
The specification
Colour paletteRead the full spec
Brand & Accent
- Ink (
{colors.primary}—#171717): The single primary CTA color. Black-near-pure ink that carries every Sign Up pill, every footer CTA, the dark-band polarity-flip. Used as text color throughout the page on light surfaces. (Resolved from--ds-gray-1000.) - Cyan (
{colors.cyan}—#50e3c2): A signature mint-cyan used in the brand gradient and inside Geist-system spotlight tokens. Visible inside the hero gradient stops. - Highlight Pink (
{colors.highlight-pink}—#ff0080): The brand's highlight magenta, used as the high-saturation stop in the preview-gradient pair. - Violet (
{colors.violet}—#7928ca): The deep purple used as the start of the preview-gradient and inside developer-console highlights. - Link Blue (
{colors.link}—#0070f3): The brand's primary link color and the legacy--geist-successsemantic.
Surface
- Canvas (
{colors.canvas}—#ffffff): The pure-white card / dialog / modal surface. - Canvas Soft (
{colors.canvas-soft}—#fafafa): The default page background — 98 % white. Almost every section sits on this tone. - Canvas Soft 2 (
{colors.canvas-soft-2}—#f5f5f5): A slightly deeper inset surface for "code editor inner background", template-card hover states, and dropdown menus. - Hairline (
{colors.hairline}—#ebebeb): 1 px dividers — table rows, card borders, input borders. - Hairline Strong (
{colors.hairline-strong}—#a1a1a1): The 500-level gray, used as the slightly-stronger divider on light bands and as the deemphasised text color.
Text
- Ink (
{colors.ink}—#171717): Every heading and body paragraph on light surfaces. - Body (
{colors.body}—#4d4d4d): Secondary text — sub-headings, body captions, nav-link inactive text, footer column body. - Mute (
{colors.mute}—#888888): Lowest-priority text — placeholder text, fine print, low-key labels. - On Primary (
{colors.on-primary}—#ffffff): All text on{colors.primary}surfaces.
Semantic
- Success / Link (
{colors.success}—#0070f3): The brand's legacy success indicator doubles as the primary link color. Visible underline-on-hover for inline body links. - Link Deep (
{colors.link-deep}—#0761d1): The pressed / visited tone for inline links. - Link Bg Soft (
{colors.link-bg-soft}—#d3e5ff): Soft pastel blue fill for "what's new" pill banners and informational badges. - Error (
{colors.error}—#ee0000): Validation red for destructive actions and form errors. - Error Soft (
{colors.error-soft}—#f7d4d6): Soft pastel red for destructive-state backgrounds. - Error Deep (
{colors.error-deep}—#c50000): Pressed / deep destructive state. - Warning (
{colors.warning}—#f5a623): Caution / pending status indicator. - Warning Soft (
{colors.warning-soft}—#ffefcf) / Warning Deep ({colors.warning-deep}—#ab570a): Background + pressed variants.
Brand Gradient
The brand's signature decoration is a three-pair gradient stack:
- Develop (
{colors.gradient-develop-start}#007cf0→{colors.gradient-develop-end}#00dfd8) — the blue-to-teal pair used to mark the "deploy" / "develop" rhythm. - Preview (
{colors.gradient-preview-start}#7928ca→{colors.gradient-preview-end}#ff0080) — the violet-to-pink pair used for "preview" surfaces. - Ship (
{colors.gradient-ship-start}#ff4d4d→{colors.gradient-ship-end}#f9cb28) — the coral-to-amber pair used for "ship" surfaces.
The three pairs collapse into a single multi-color mesh gradient when used as the hero atmospheric backdrop. Treat the gradient as one unified object — do not crop down to a single colour, do not reorder the stops, and do not miniaturise. Used at hero scale only.
Type scaleRead the full spec
Font Family
Two custom faces carry the entire system:
- A custom geometric sans (extracted as
Geist) for every display, body, button, link, and label. Weights 400 / 500 / 600 are the working set; the face never appears in 700 or heavier. Display sizes are tracked aggressively negative (-2.4 pxat 48 px hero,-1.28 pxat 32 px section); body stays at neutral or slightly-negative tracking. - A custom monospaced face (extracted as
Geist Mono) for terminal mockups, code blocks, and small mono-caption labels — anything that wants to signal "technical." Weight 400 only at 12 – 13 px. Tracking neutral.
A condensed display sans (Space Grotesk) is loaded as a third face for occasional editorial moments but does not render as the primary face anywhere in the captured surfaces.
Hierarchy
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
{typography.display-xl} | 48px | 600 | 48px | -2.4px | Hero headline ("Build and deploy on the AI Cloud."). |
{typography.display-lg} | 32px | 600 | 40px | -1.28px | Section headlines ("Your frontend, delivered.", "A compute model for all workloads."). |
{typography.display-md} | 24px | 600 | 32px | -0.96px | Card-cluster headlines, pricing-tier names. |
{typography.display-sm} | 20px | 600 | 28px | -0.6px | Inline display micro-headings. |
{typography.body-lg} | 18px | 400 | 28px | 0 | Lead paragraphs under section headlines. |
{typography.body-md} | 16px | 400 | 24px | 0 | Default body paragraph. |
{typography.body-md-strong} | 16px | 500 | 24px | 0 | Bolded inline body. |
{typography.body-sm} | 14px | 400 | 20px | -0.28px | Secondary body, nav-link text, button-md labels. |
{typography.body-sm-strong} | 14px | 500 | 20px | -0.28px | Nav CTA labels, table-row emphasis. |
{typography.caption} | 12px | 400 | 16px | 0 | Footer secondary lines, badge labels. |
{typography.caption-mono} | 12px | 400 | 16px | 0 | Section eyebrows and label captions that want a technical voice. |
{typography.code} | 13px | 400 | 20px | 0 | Inline code, terminal mockups, command snippets. |
{typography.button-md} | 14px | 500 | 20px | 0 | Small / nav-scale button labels. |
{typography.button-lg} | 16px | 500 | 24px | 0 | Marketing-scale pill button labels. |
Principles
- Negative tracking is part of the voice. Display sizes use aggressive
-2.4to-0.6px tracking. Reverting to default tracking breaks the brand. - Sentence-case headlines, period-terminated. Headlines like "Build and deploy on the AI Cloud." end with a deliberate period — that punctuation is part of the brand's voice.
- Mono for the technical layer only. Section eyebrows, code blocks, terminal mockups. Body paragraphs never set in mono.
- Weight 600 is the display ceiling. The geometric sans never appears at 700 / 800. The brand reads as a calmer system because of this.
Note on Font Substitutes
The two primary faces are proprietary (custom-cut for the brand). Open-source substitutes:
- Geometric sans — *Inter* (400 / 500 / 600) is the closest stylistic match;
font-feature-settings: "ss01", "ss02"enables the geometric alternates. *Satoshi* is a passable second choice. - Monospace — *JetBrains Mono* (400) at 12 – 13 px matches the technical voice. *IBM Plex Mono* is the second-best option.
Components and layoutRead the full spec
Buttons
button-primary — the canonical 100-px-radius black pill, marketing scale.
- Background
{colors.primary}, text{colors.on-primary}, label set in{typography.button-lg}, padding0px {spacing.sm}12 px, shape{rounded.pill}100 px. Renders ~48 px tall when paired with the marketing flex layout.
button-secondary — the white pill paired with the black primary inside marketing bands.
- Background
{colors.canvas}, text{colors.ink}, same typography + padding asbutton-primary, shape{rounded.pill}.
button-primary-sm — the smaller-scale primary pill used inside nav and pricing-card CTAs.
- Background
{colors.primary}, text{colors.on-primary}, label set in{typography.button-md}(14 px / 500), shape{rounded.pill}.
button-secondary-sm — the smaller-scale white pill paired with button-primary-sm.
- Background
{colors.canvas}, text{colors.ink}, same typography + shape asbutton-primary-sm.
tab-ghost — the centred-row tab pill ("AI Apps / Web Apps / Ecommerce / Marketing / Platforms").
- Background
{colors.canvas}, text{colors.ink}, label set in{typography.body-sm}, padding0px {spacing.md}, shape{rounded.pill-sm}64 px.
icon-button-circular — the circular icon container (often a "?" or arrow inside).
- Background
{colors.canvas}, dark icon, 1 px solid hairline border, shape{rounded.full}.
Nav CTAs:
nav-cta-signup — the small black "Sign Up" button in the nav row.
- Background
{colors.primary}, text{colors.on-primary}, label{typography.body-sm-strong}, padding0px {spacing.xs}, height 28 px, shape{rounded.sm}6 px (the brand's--geist-radius).
nav-cta-login — the white "Log In" button in the nav.
- Background
{colors.canvas}, text{colors.ink}, same typography / height / shape asnav-cta-signup.
nav-cta-ask-ai — the small "Ask AI" button with a faint border.
- Background
{colors.canvas}, text{colors.ink}, 1 px solid{colors.hairline}border (extracted as0px solid rgb(235, 235, 235)), same typography / height / shape.
Cards & Containers
card-marketing — the canonical marketing feature card (3-up section cards).
- Background
{colors.canvas}, text{colors.ink}, padding{spacing.lg}24 px, shape{rounded.md}8 px (the--geist-marketing-radius). Carries Level 3 soft-stack shadow.
card-marketing-large — the larger marketing card used for "compute model" / "AI Gateway" callouts.
- Background
{colors.canvas}, text{colors.ink}, padding{spacing.xl}, shape{rounded.lg}12 px. Carries Level 4 float-stack shadow.
card-soft — the soft-tinted card used inside cluster groups (lighter than canvas-soft).
- Background
{colors.canvas-soft}, text{colors.ink}, padding{spacing.lg}, shape{rounded.md}.
template-card — the deploy-template card in the "Deploy your first app" grid.
- Background
{colors.canvas}, text{colors.ink}, padding{spacing.md}16 px, shape{rounded.md}8 px. Hosts a 16:9 thumbnail at the top.
code-editor-mockup — the dark code-preview surface inside marketing bands.
- Background
{colors.primary}, text{colors.on-primary}, body in{typography.code}(13 px / Geist Mono), padding{spacing.lg}24 px, shape{rounded.md}8 px.
pricing-card — the default pricing-tier card.
- Background
{colors.canvas}, text{colors.ink}, padding{spacing.xl}32 px, shape{rounded.lg}12 px. Inside: tier name in{typography.display-md}, price in{typography.display-xl}, feature list in{typography.body-md}rows, CTA at the bottom.
pricing-card-featured — the polarity-flipped "Pro" tier card.
- Background
{colors.primary}, text{colors.on-primary}, same shape + padding aspricing-card. CTA inverts tobutton-secondary-sm(white pill on black card).
Inputs & Forms
form-input — the canonical text input.
- Background
{colors.canvas}, text{colors.ink}, 1 px solid{colors.hairline}border, body in{typography.body-sm}(14 px), padding0px {spacing.sm}, height 40 px (the brand's--geist-form-height), shape{rounded.sm}6 px.
form-input-sm — small-height variant (32 px tall) for tight forms.
- Same as
form-inputbut height 32 px (the--geist-form-small-height).
form-input-lg — large-height variant (48 px tall) for hero CTAs.
- Same as
form-inputbut height 48 px (the--geist-form-large-height); body in{typography.body-md}16 px.
Navigation
nav-bar — the sticky top nav.
- Background
{colors.canvas}, text{colors.ink}, height 64 px (the brand's--header-height), padding{spacing.sm} {spacing.lg}. Layout: logo left, link row centre, "Ask AI / Log In / Sign Up" cluster right.
nav-link — the centred link row inside nav-bar.
Drop-in CSS variables
The same values as a theme block. Add the class to <body> and the site repaints.
body.theme-vercel {--page-bg: #ffffff;
--page-bg-gradient: none;
--text-color: #171717;
--heading-color: #171717;
--link-color: #0070f3;
--link-hover-color: #0058c0;
--border-color: #d5d5d5;
--card-bg: #ffffff;
--card-shadow: 0 1px 2px rgba(23,23,23,0.06);
--card-hover-shadow: 0 6px 18px rgba(23,23,23,0.12);
--header-bg: #171717;
--header-text-color: #ffffff;
--header-shadow: none;
--footer-bg: #ffffff;
--footer-text-color: #686868;
--button-bg: #171717;
--button-text-color: #ffffff;
--button-hover-bg: #000000;
--button-border: none;
--button-border-radius: 12px;
--button-secondary-bg: #f1f1f1;
--button-secondary-text-color: #171717;
--button-secondary-hover-bg: #e3e3e3;
--button-secondary-border: 1px solid #d5d5d5;
--prompt-bg: #f3f3f3;
--prompt-text-color: #171717;
--base-font: var(--font-inter);
--heading-font: var(--font-helvetica);
--card-border-radius: 12px;
}
Visually close to
Measured with a deterministic colour + geometry comparison across 958 styles. Not a hand-picked list.
- cal 83.6%
- cursor 80.9%
- elevenlabs 78.1%
- coinbase 76.2%
- expo 76.0%
Where this came from
- Source document
volt/design-md/vercel/DESIGN.md· 40.1 KB- Repository
- VoltAgent/awesome-design-md
- Licence
- MIT
Source text is reproduced under its original licence. Tokens, similarity scores and page structure are ours.