Railway Design System
Railway's design language as a DESIGN.md file. Indigo canvas #13111c, IBM Plex Serif hero, violet #553f83 CTA, hairline #33323e. For React + 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
- #553f83
- Typeface
- Inter
- Shape
- Mixed
- Base radius
- 8px
- Colors
- 24
- Type tokens
- 12
- Components
- 17
- Spacing values
- 9
About
About Railway DESIGN.md
Curated by Dov Azencot · Updated May 13, 2026 · Source railway.com (opens in a new tab)
Railway's marketing page is what happens when a developer-cloud brand decides the right reference is not a dashboard mockup and not a launchpad illustration but a calm, mostly-empty stage. The canvas is "#13111c", an indigo-midnight so dark it reads as black until you put it next to actual black and watch it tilt violet. The hero headline is set in IBM Plex Serif at 54px / weight 500 / "-1.96px" tracking and reads "Ship software peacefully" — a serif on a dark page on a developer cloud, three decisions that almost no infrastructure brand makes together. Behind the headline sits a layered hero gradient (violet "#3d2259" / pink "#291839" / a far blue) that operates as theatre lighting rather than decoration. Everything else on the page — body paragraphs, nav links, button labels, footer rows — runs Inter at modest weights on the same indigo canvas.
This DESIGN.md packages the system into one machine-readable file following the Google Labs spec. Inside: 24 colors tokens (the "#13111c" canvas, the "#f7f7f8" near-white text with 1165 occurrences, the "#33323e" hairline border with 1049 occurrences, the single muted-violet "#553f83" CTA, the brand green "#42946e" reserved for status indicators, plus the layered hero gradient stops "#3d2259" / "#291839" / "#180d43"), 11 typography tokens across IBM Plex Serif, Inter, Inter Tight, and JetBrains Mono, 7 radii from 4px to 9999px built around a 4px base (the 4px corner counts 439 times on the page), 9 spacing values from 2px to 64px, and 17 components covering the violet pill, the white-on-dark ghost button, the framed deploy mockup, the nav row, and the surface-elevated card.
Feed the file to Claude, Cursor, or Copilot when you want a React surface that reads as Railway — indigo canvas, serif headlines on dark, "#33323e" hairlines everywhere, a single muted-violet conversion target. Where most developer-cloud brands signal velocity with weight 600 sans, pure black canvases, and saturated electric accents, Railway signals it by lowering the voltage: a serif at weight 500, an indigo-not-black canvas, a violet CTA dialed two steps toward gray, and a hairline that lets the page read as one continuous surface rather than a stack of cards.
What makes it distinct
5
- Indigo-midnight canvas'#13111c' carries the entire page; no light surfaces, no polarity flips, no marketing white bands
- Serif hero on darkIBM Plex Serif at weight 500 with '-1.96px' tracking is the voice; Inter handles everything else
- Single muted-violet CTA'#553f83' fills one pill at 8px radius and never repeats as a fill anywhere else on the page
- Hairline as the entire structure'#33323e' draws 1049 of the page's borders, the highest-frequency color on the surface
- Hero gradient as theatre lightingviolet '#3d2259' / pink '#291839' layered behind the serif headline, never repeated as swatches
railway.com
Live at railway.com
A snapshot of the brand in production. Scroll the frame to see the whole page.

Colors
24 colors
Railway's system runs on #553f83 as its primary voltage, used in 1 of 17 components. Type is set in Inter across 12 tokens from 14px to 54px, weights 400–600. Shape language is mixed across 17 components, blending pills, soft rounds, and squarer corners.
Brand & Accent
Sparing, CTA-only voltage · 2
Surface
Page and card backgrounds · 4
Text
Headlines, body, captions · 7
Borders & Hairlines
Dividers, outlines, rules · 2
Semantic
Status, errors, success, links · 4
Other
Specialty colors · 5
Typography
12 type tokens
Set in Inter across 12 tokens, from 14px to 54px, weights 400–600. Shown in its own stack: where the font isn't installed, the fallback the file names stands in.
- display-xl54px · weight 500 · lh 60.48px · tracking -1.96pxThe quick brown fox jumps over the lazy dog
- display-lg40px · weight 400 · lh 48px · tracking -0.8pxThe quick brown fox jumps over the lazy dog
- display-md36px · weight 400 · lh 48px · tracking -0.72pxThe quick brown fox jumps over the lazy dog
- stat-eyebrow40px · weight 600 · lh 48px · tracking -0.6pxThe quick brown fox jumps over the lazy dog
- body-lg20px · weight 400 · lh 28px · tracking normalThe quick brown fox jumps over the lazy dog
- body-lede18px · weight 500 · lh 28.8px · tracking -0.09pxThe quick brown fox jumps over the lazy dog
- body-md16px · weight 400 · lh 24px · tracking normalThe quick brown fox jumps over the lazy dog
- body-md-strong16px · weight 500 · lh 24px · tracking normalThe quick brown fox jumps over the lazy dog
- body-sm14px · weight 400 · lh 20px · tracking normalThe quick brown fox jumps over the lazy dog
- body-sm-strong14px · weight 500 · lh 20px · tracking normalThe quick brown fox jumps over the lazy dog
- button-lg20px · weight 500 · lh 32px · tracking -0.2pxThe quick brown fox jumps over the lazy dog
- code14px · weight 400 · lh 20px · tracking normalThe quick brown fox jumps over the lazy dog
Layout
Radii and spacing
7 corner radii and 9 spacing values. Shape language: mixed.
Radii
- none0px
- xs4px
- sm6px
- md8px
- lg12px
- xl16px
- full9999px
Spacing
- xxs2px
- xs4px
- sm8px
- md12px
- base16px
- lg24px
- xl32px
- 2xl48px
- 3xl64px
Components
17 components
Each rendered from its tokens (color, type, radius, padding) on Railway's own canvas.
- Nav Barnav-barNav Bar
- Nav Linknav-linkNav Link
- Button Primarybutton-primaryButton Primary
- Button Primary Hoverbutton-primary-hoverButton Primary Hover
- Button Ghostbutton-ghostButton Ghost
- Button Secondary Smbutton-secondary-smButton Secondary Sm
- CardcardCard
- Card Deepcard-deepCard Deep
- Hero Bandhero-bandHero Band
- Hero Gradient Overlayhero-gradient-overlayHero Gradient Overlay
- Deploy Mockup Framedeploy-mockup-frameDeploy Mockup Frame
- Type here…text-inputText Input
- Badge Status Successbadge-status-successBadge Status Success
- Badge Eyebrowbadge-eyebrowBadge Eyebrow
- Logo Striplogo-stripLogo Strip
- FooterfooterFooter
- Link Inlinelink-inlineLink Inline
In use
The system, in use
Railway'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.
FAQ
Railway design system FAQ
Common questions about Railway's tokens, components, and how to use this DESIGN.md in your project.
Read next
Related reading
Specs, directories, and component libraries that pair with this design system.
- Browse all design systemsThe full directory of DESIGN.md files on shadcn.io, with live mockups for each.shadcn.io
- Railway — official siteDeploy web apps, servers, databases, and AI agents on the all-in-one Railway cloud.railway.com (opens in a new tab)
- The DESIGN.md specificationGoogle Labs' open spec for machine-readable design system files.github.com (opens in a new tab)
Use it
Use Railway in your project
One machine-readable file. Drop it into Claude, Cursor, or any AI tool that reads DESIGN.md.
Download the DESIGN.md
One machine-readable file: every color, type, radius, spacing, and component token of Railway.
Feed it to your AI tool
Drop it into Claude, Cursor, or GitHub Copilot. The agent writes React components and Tailwind classes that match Railway's visual language.
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
Railway's surface is a developer-cloud marketing page rendered as a calm indigo theatre — a single dark canvas at "#13111c" carries the entire page from hero to footer, with no light bands, no polarity-flips, no marketing-white insets. The hero headline reads "Ship software peacefully" in IBM Plex Serif at 54px / weight 500 / "-1.96px" tracking, and the choice of a humanist serif at modest weight on dark is the brand's strongest move. Behind the headline sits a layered atmospheric gradient — violet "#3d2259" / pink "#291839" / deep blue "#180d43" — declared as --heroGradient on the root and applied only at hero scale.
Indigo not black: where most developer-cloud brands run pure black or a near-black gray as their canvas, Railway sets {colors.canvas} ("#13111c") two steps toward violet so the surface holds warmth instead of austerity. The same indigo-bias appears in the {colors.hairline} ("#33323e") — a violet-gray hairline that draws 1049 of the borders on the page (the single highest-frequency color in the extraction). Pair the canvas with the hairline and the page reads as one continuous indigo surface rather than a stack of separate cards.
Voltage restraint: Railway runs a single-CTA discipline. {colors.primary} ("#553f83"), a muted violet two steps toward gray, fills the Deploy pill at 8px radius, 12px / 24px padding, 58px tall. It never repeats as a fill anywhere else on the page — every secondary action is a ghost button with transparent fill and a 1px "#33323e" border. The brand never escalates the violet into a duo with a second saturated accent; the only chromatic moves are the layered hero gradient (theatre lighting) and the brand green {colors.status-success} ("#42946e") reserved for status indicators.
Key Characteristics:
- Single dark canvas —
{colors.canvas}("#13111c") indigo-midnight is the only background tone; surfaces lift via{colors.canvas-elevated}("#1c1a28") at +9% lightness or{colors.canvas-deep}("#0b0b0f") at -3%. - Serif hero on dark — IBM Plex Serif at weight 500 / "-1.96px" tracking carries display; Inter handles everything else (body, nav, buttons, footer) at weights 400 / 500 / 600 / 700.
- Hairline-as-structure —
{colors.hairline}("#33323e") draws every divider, card border, input chrome, and footer column edge across the page (1049 occurrences). - Single violet CTA —
{colors.primary}("#553f83") fills exactly one pill; every secondary action is the transparent-fillbutton-ghostwith the same 8px corner. - Atmospheric hero gradient — three-stop violet / pink / blue fused as
--heroGradient, used only at hero scale, never miniaturized as a swatch or repeated as a chip color. - 4px corner ubiquity —
{rounded.xs}4px counts 439 times across the page; 8px reserved for the Deploy CTA pill and primary cards.
Colors
Brand & Accent
- Primary Violet (
{colors.primary}—"#553f83") — frequency 1, used as background (1). Reserved for the single Deploy CTA pill — the only filled conversion target on the page. - Gradient Violet (
{colors.gradient-violet}—"#3d2259") — frequency 1, used as background (1). The middle stop of the hero atmospheric gradient. - Gradient Pink (
{colors.gradient-pink}—"#291839") — frequency 1, used as background (1). The warm-side stop of the hero gradient, tinted toward magenta. - Gradient Blue (
{colors.gradient-blue}—"#180d43") — frequency 1, used as background of the info-dialog surface. Declared as--osano-info-dialog-background-colorand surfaces also in--heroGradientas the deep-blue stop.
Canvas
- Canvas (
{colors.canvas}—"#13111c") — frequency 10, used as background (10). The page body — every hero, section, nav, and footer surface. Declared as--backgroundand--osano-dialog-background-color. - Canvas Elevated (
{colors.canvas-elevated}—"#1c1a28") — frequency 5, used as background (5). The +9% lightness surface for cards, dropdowns, and badge fills. - Canvas Deep (
{colors.canvas-deep}—"#0b0b0f") — frequency 218, used as background (218). The -3% lightness inset for the deploy mockup frame and code-preview rectangles. - Canvas Info (
{colors.canvas-info}—"#180d43") — frequency 0, used in the dialog and info-dialog backgrounds as a deeper-violet inset.
Text
- Ink (
{colors.ink}—"#f7f7f8") — frequency 1416, used as text (1165), border (230), background (18). The page's near-white text — every heading, body paragraph, button label, and CTA fill resolves through this token (it merges "#ffffff" and "#f7f7f8" as one perceptual stop). Declared as--foreground. - Ink Soft (
{colors.ink-soft}—"#dcdce0") — frequency 5, used as text (5). Slightly softer than the primary ink — nav-link labels, secondary headings, table-row emphasis. Declared as--gray-800. - Ink Mute (
{colors.ink-mute}—"#a1a0ab") — frequency 76, used as text (76). Tertiary text — footer rows, lowest-priority labels. Declared as--gray-600. - Ink Deep Mute (
{colors.ink-deep-mute}—"#878593") — frequency 5, used as text (5). Fine print and disabled-state labels. Declared as--gray-500. - Ink Dim (
{colors.ink-dim}—"#545260") — frequency 4, used as text (4). The dimmest readable text — placeholder copy. Declared as--gray-300.
Hairline
- Hairline (
{colors.hairline}—"#33323e") — frequency 1049, used as border (1049). The single highest-frequency color on the page — every card edge, nav divider, input chrome, table row, and footer column border. Declared as--gray-200. - Hairline Strong (
{colors.hairline-strong}—"#545260") — frequency 4, used as text (4). A deeper divider for emphasized borders. Declared as--gray-300.
Status
- Success (
{colors.status-success}—"#42946e") — frequency 5, used as text (3), background (2). The brand green — reserved for status indicators ("Active", "Healthy", deploy-state pills). Declared as--green-500. - Success Soft (
{colors.status-success-soft}—"#609f89") — frequency 2, used as text (2). A muted green for secondary status text. - Warning (
{colors.status-warning}—"#c67839") — frequency 2, used as text (2). The brand amber, reserved for warning states.
Typography
Font Families
Four faces carry the entire system:
- IBM Plex Serif — display only. Loaded at weight 400 (section H2/H3 at 40px and 36px) and weight 500 (hero at 54px). Aggressive negative tracking ("-1.96px" at 54px, "-0.8px" at 40px, "-0.72px" at 36px). The serif on a developer-cloud surface is the brand's strongest typographic move; it never appears at weight 600 or in italic for emphasis.
- Inter — body, nav, button labels, captions. Weights 400, 500, 600, 700 at 14px / 16px / 18px / 20px. Tracking neutral except for a single "-0.09px" lede under the hero and the "-0.2px" Deploy button.
- Inter Tight — one role only. Declared as
--font-inter-tightand used for a 40px / weight 600 / "-0.6px" stat eyebrow ("99.99% uptime" / "Sub-100ms cold starts" pattern). - JetBrains Mono — code and terminal mockups. Declared as
--font-jetbrains-monoon :root; reserved fordeploy-mockup-frameand inline code spans.
Hierarchy
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
{typography.display-xl} | 54px | 500 | 60.48px | "-1.96px" | The IBM Plex Serif hero headline ("Ship software peacefully"). |
{typography.display-lg} | 40px | 400 | 48px | "-0.8px" | Section H2 ("Deploy anything without the complexity"). |
{typography.display-md} | 36px | 400 | 48px | "-0.72px" | Subsection H3 inside feature bands. |
{typography.stat-eyebrow} | 40px | 600 | 48px | "-0.6px" | Inter Tight stat eyebrows above feature copy. |
{typography.body-lg} | 20px | 400 | 28px | "normal" | Lede paragraphs under section headlines. |
{typography.body-lede} | 18px | 500 | 28.8px | "-0.09px" | The hero subhead under the serif headline. |
{typography.body-md} | 16px | 400 | 24px | "normal" | Default body paragraph and inline anchor text. |
{typography.body-md-strong} | 16px | 500 | 24px | "normal" | Bolded inline body and card-title emphasis. |
{typography.body-sm} | 14px | 400 | 20px | "normal" | Secondary body, nav-link text, footer rows. |
{typography.body-sm-strong} | 14px | 500 | 20px | "normal" | Nav CTA labels and table-row emphasis. |
{typography.button-lg} | 20px | 500 | 32px | "-0.2px" | The Deploy CTA pill label. |
{typography.code} | 14px | 400 | 20px | "normal" | JetBrains Mono — code blocks and terminal text. |
Principles
- Serif on dark for display only. IBM Plex Serif carries 54px / 40px / 36px display sizes — nothing below 36px is set in serif. Reverting display to a sans breaks the brand.
- Weight 500 is the serif ceiling. The hero is the only place the serif uses weight 500; section H2 and H3 drop back to weight 400. The serif never appears at 600 or italic.
- Negative tracking on display. "-1.96px" at 54px is the strongest tightening on the page; section H2 stays at "-0.8px"; body stays at neutral.
- Inter for everything else. Body, nav, buttons, footer — never mix with the serif outside display sizes.
Layout
Spacing System
- Base unit: 4px. Every captured value is a multiple of 4 except the rare 2px micro-padding inside pill badges.
- Tokens:
{spacing.xxs}2px ·{spacing.xs}4px ·{spacing.sm}8px ·{spacing.md}12px ·{spacing.base}16px ·{spacing.lg}24px ·{spacing.xl}32px ·{spacing.2xl}48px ·{spacing.3xl}64px. - Section padding: marketing bands use
64px 0px(the captured value with 9 occurrences) top/bottom. Hero stretches further to give the gradient room. - Card interior padding: the canonical card uses
24px 24px 32px(12 occurrences) — slightly more bottom padding to balance the headline / body / CTA stack. - Button padding: the Deploy CTA uses
12px 24px; small secondary buttons use6px 12px(9 occurrences) or6px 16px(5 occurrences). - Horizontal gutter: section content centers with
0px 40px(12 occurrences) on desktop,0px 16px(8 occurrences) on mobile,0px 32px(4 occurrences) on tablet.
Grid & Container
- Max width: ~1200–1280px. Content centers with horizontal gutters of 40px on desktop, 16px on mobile.
- Column patterns:
- Hero stack: serif headline + Inter lede + CTA pair, vertically centered, gradient backdrop.
- Three-feature row: 3-up at desktop, 1-up at mobile (the "Deploy anything" feature trio).
- Deploy mockup band: full-width inset card surfacing a code / terminal preview on
{colors.canvas-deep}. - Logo strip: ~7 customer logos wide, single row.
- Footer: 4-column nav row plus brand row.
Whitespace Philosophy
The hero gradient does most of the decorative work; whitespace separates the bands. Section spacing is generous — {spacing.3xl} 64px between bands lets the indigo canvas breathe. Inside a card, the headline / body / CTA stack is tight ({spacing.sm} 8px gap), then a wider gap before the next section.
Elevation & Depth
| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No shadow, no border. | Hero band and full-bleed gradient sections. |
| Level 1 — Hairline | 1px solid {colors.hairline} "#33323e" border on {colors.canvas-elevated}. | Default card chrome — the brand's universal "you can see this card" cue. |
| Level 2 — Deep Inset | Same hairline on {colors.canvas-deep} "#0b0b0f". | The deploy mockup frame and code-preview surfaces. |
| Level 3 — Warm Shadow | Hairline plus a soft {colors.shadow-warm} "#3e2d2d" warm-tinted shadow. | Elevated pricing cards and highlight panels. |
| Level 4 — Indigo Shadow | Hairline plus {colors.cta-shadow} "#414ea6" tinted shadow. | The single CTA-cluster shadow on the Deploy button hover state. |
The brand uses HAIRLINE elevation rather than drop shadows — the "#33323e" border is the depth cue on a dark canvas, not blur. When a shadow does appear (5 instances in the extraction), it's color-tinted toward the brand rather than neutral gray.
Decorative Depth
- Hero gradient as theatre lighting: the three-stop violet / pink / blue gradient is the only "atmospheric" effect; applied flat as a backdrop, never a 3-D illustration.
- Canvas ladder as section-depth: switching from
{colors.canvas}"#13111c" to{colors.canvas-elevated}"#1c1a28" (a +9% lightness step) is the chief depth cue between bands. The deploy mockup steps down to{colors.canvas-deep}"#0b0b0f" for a recessed feel.
Shapes
Border Radius Scale
| Token | Value | Use |
|---|---|---|
{rounded.none} | "0px" | Full-bleed hero / footer bands and section dividers. |
{rounded.xs} | "4px" | The dominant corner — 439 occurrences. Every card, badge, input, and dropdown sits at 4px. |
{rounded.sm} | "6px" | Tighter UI radius for compact buttons and inline pills (7 occurrences). |
{rounded.md} | "8px" | The Deploy CTA pill and primary cards (30 occurrences). |
{rounded.lg} | "12px" | Slightly larger card chrome — feature highlight panels (5 occurrences). |
{rounded.xl} | "16px" | Largest card chrome — hosted-image cap surfaces (6 occurrences). |
{rounded.full} | "9999px" | Status pills and the badge eyebrow (15 occurrences). |
Photography Geometry
- Hero gradient: full-bleed 2-D atmospheric backdrop, never cropped to a frame.
- Customer logos: monochrome SVG, consistent height in a flex row.
- Deploy mockup frame: 16:10 dark rectangle on
{colors.canvas-deep}, hairline border, JetBrains Mono code rendered inside. - Feature thumbnails: 16:9 landscape inside
{rounded.md}chrome with hairline border.
Components
Buttons
button-primary — the single Deploy CTA pill.
- Background
{colors.primary}("#553f83"), text{colors.primary-on}("#ffffff"), border"#ffffff", label set in{typography.button-lg}(20px / weight 500 / "-0.2px" tracking), padding "12px 24px", shape{rounded.md}8px. Renders 58px tall.
button-primary-hover — the hover state of the Deploy pill.
- Shifts background toward
{colors.gradient-deep-violet}("#553f83" deepened); keeps the same 8px shape and 58px height.
button-ghost — the secondary action paired with the Deploy pill.
- Transparent fill on
{colors.canvas}, text{colors.ink}("#f7f7f8"), 1px{colors.hairline}("#33323e") border, same typography / padding / height asbutton-primary.
button-secondary-sm — the smaller secondary button used inside nav and card CTAs.
- Background
{colors.canvas-elevated}("#1c1a28"), text{colors.ink}, hairline border, label{typography.body-sm-strong}, padding "8px 12px", height 32px, shape{rounded.md}.
Cards & Containers
card — the canonical feature card.
- Background
{colors.canvas-elevated}("#1c1a28"), text{colors.ink}, hairline border, padding{spacing.lg}24px, shape{rounded.md}8px. Sits on the indigo canvas with Level 1 hairline elevation only.
card-deep — the recessed inset card for code mockups.
- Background
{colors.canvas-deep}("#0b0b0f"), text{colors.ink}, hairline border, padding{spacing.lg}, shape{rounded.md}. Reads as "below the canvas" rather than "above it."
deploy-mockup-frame — the dark code-preview surface inside the hero band.
- Background
{colors.canvas-deep}("#0b0b0f"), text{colors.ink}, hairline border, body in{typography.code}(14px / JetBrains Mono), padding{spacing.lg}24px, shape{rounded.md}8px.
Inputs & Forms
text-input — the canonical text input.
- Background
{colors.canvas-elevated}("#1c1a28"), text{colors.ink}, 1px hairline border, body in{typography.body-sm}(14px), padding "0px 12px", height 40px, shape{rounded.md}8px.
Navigation
nav-bar — the sticky top nav.
- Background
{colors.canvas}("#13111c"), text{colors.ink}, hairline bottom border, height 64px, padding "12px 24px". Layout: logo left, link row center, sign-in / Deploy CTA cluster right.
nav-link — the link row inside nav-bar.
- Text
{colors.ink-soft}("#dcdce0"), set in{typography.body-sm-strong}(14px / weight 500), padding "0px 12px", height 17px.
Signature Components
hero-band — the indigo hero with the layered gradient backdrop.
- Background
{colors.canvas}("#13111c"), text{colors.ink}("#f7f7f8"), padding{spacing.3xl} {spacing.lg}64px / 24px. Inside: a small badge above the headline, the IBM Plex Serif hero in{typography.display-xl}("Ship software peacefully"), a lede in{typography.body-lede}, then a CTA row withbutton-primaryplusbutton-ghost. Thehero-gradient-overlaysits behind, occupying the top half of the band.
hero-gradient-overlay — the layered violet / pink / blue atmospheric backdrop.
- Background composed of
{colors.gradient-violet},{colors.gradient-pink},{colors.gradient-blue}fused as--heroGradient. Applied at hero scale only; never miniaturized.
badge-status-success — the brand-green status pill.
- Background
{colors.canvas-elevated}, text{colors.status-success}("#42946e"), hairline border, body in{typography.body-sm}, padding "2px 8px", shape{rounded.full}.
badge-eyebrow — the indigo eyebrow pill above section headlines.
- Background
{colors.canvas-elevated}, text{colors.ink-soft}, hairline border, body in{typography.body-sm}, padding "2px 12px", shape{rounded.full}.
logo-strip — the customer-logo row near the top of the page.
- Background
{colors.canvas}, text{colors.ink-mute}("#a1a0ab"), padding{spacing.lg} {spacing.xl}. Logos rendered as monochrome SVGs at consistent height.
footer — the bottom 4-column nav.
- Background
{colors.canvas}("#13111c"), text{colors.ink-mute}("#a1a0ab"), hairline top border, padding{spacing.3xl} {spacing.lg}. Column labels in{typography.body-sm-strong}; link rows in{typography.body-sm}.
link-inline — body-copy inline links.
- Text
{colors.ink}("#f7f7f8") with underline on hover; body set in{typography.body-md}.
Do's and Don'ts
Do
- Use
{colors.canvas}"#13111c" as the only page background — don't introduce a light surface anywhere in the marketing layout. - Set every display heading in IBM Plex Serif at weight 500 (hero) or weight 400 (H2 / H3). Below 36px, switch to Inter.
- Use
{colors.hairline}"#33323e" as the single divider color across the page — every card, nav, input, and footer column border. - Render the hero gradient once, at hero scale, as a backdrop. Apply it via
--heroGradientand don't fork it into per-section variants outside the documented--kickbackHeroGradientsecondary surface. - Keep the Deploy CTA the only filled button on the page. Pair it with a transparent ghost button for the secondary action.
Don't
- Don't use "#0b0b0f" (
{colors.canvas-deep}) as the page background — it's an inset-only token (218 background occurrences inside the deploy mockup frame and code-preview rectangles). For the page body, use{colors.canvas}"#13111c" instead; the +5% lightness difference is what keeps the mockup reading as recessed. - Don't set body text in IBM Plex Serif. The serif is display-only at 36px / 40px / 54px; setting body in serif collapses the contrast between the headline and the paragraph and breaks the brand's serif-on-dark gesture.
- Don't substitute a neutral gray for
{colors.hairline}"#33323e". The violet tilt (the hairline sits at hue 288° in OKLCH) is what keeps the page reading as one continuous indigo surface; a flat-neutral replacement reads as a dashboard, not as Railway. - Don't escalate the Deploy CTA radius past
{rounded.md}8px. The 8px corner is the pill's signature — 12px reads as a generic SaaS button, and 9999px reads as a Vercel-style marketing pill. - Don't add a second saturated brand color to the page. The marketing surface runs one violet CTA ("#553f83") plus one brand green ("#42946e") for status pills. Introducing a brand blue or amber turns Railway's restraint into a dashboard demo.
- Don't fill the hero gradient into a button or card surface. The gradient is theatre lighting — applied at hero scale only as a flat backdrop, never miniaturized.
Known Gaps
- Hover-state colors: The brand uses subtle hover transitions on nav links and the Deploy CTA (typically a faint shift toward
{colors.gradient-deep-violet}"#553f83"), but precise per-component hover tokens are not captured in the extraction. - Focus rings: Form inputs declare a focus ring color via
--tw-ring-color(a soft sky-blue at 50% alpha), but the per-component focus-ring width and the exact ring hex are not documented in the captured token set. - In-app dashboard surfaces: This DESIGN.md covers the public marketing page. The Railway dashboard's denser inner surfaces — service tiles, deploy logs, project trees — use the same "#13111c" + IBM Plex Serif vocabulary with tighter spacing and additional gray-scale steps not captured here.
- Light mode: Railway's marketing page runs dark-only; no light-mode tokens are declared. A polarity-flipped variant would require deriving canvas / hairline / ink tokens from scratch.
- Motion: The hero gradient is static at capture; if the live page animates the gradient stops, that timing is not documented here.
Web Infrastructure & Hosting
More systems like this
More DESIGN.md files in Web Infrastructure & Hosting.
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.
Billing
Billed once a year in USD. Cancel anytime.
- How many people can use the license.
- Client work, SaaS products and anything you charge for.
- Production-ready React sections: hero, pricing, features, dashboards and more.
- Complete multi-page sites you can ship as they are.
- React icons from every major library, installable with one command.
- Presets that restyle every block, in light and dark.
- Lets your AI editor search, preview and install blocks for you.
- Priority requests are answered first.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- Seats: 1 seat
- Commercial use: Personal & open source only
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: Basic usage
- Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
- Seats: Up to 5 seats
- Commercial use: Included
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: High usage
- Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
- Seats: Unlimited seats
- Commercial use: Included
- Pro blocks: 6,000+ blocks
- Templates: All 14 templates
- React icons: 294k+ icons
- Themes: All 59 themes
- MCP server: Unlimited usage
- Support: Priority
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 popularFor 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.