curated design system
supabase.com
Extracted from supabase.com and curated against the Supabase brand. Every value below is real tokens read from examples/supabase/tokens.json.
colors· 17
Primary
272×Accent
4×Brand Dark
20×Ink
889×Canvas
11803×Muted
2894×long-tail · 11
click to copy
typography· 19
Display XXL72pxw400Circular
Display XL48pxw400Source Code Pro
Display LG36pxw400Circular
Display LG36pxw400Source Code Pro
Display MD30pxw400Circular
Heading LG24pxw400Circular
Heading LG24pxw400Source Code Pro
Heading LG24pxw500Circular
Heading MD20pxw400Source Code Pro
Heading MD18pxw400Circular
Body LG18pxw700Source Code Pro
Body MD16pxw400Circular
Body SM14pxw500Circular
Body SM14pxw400Circular
Body SM13pxw400Circular
Caption12pxw400Circular
Overline12pxw400Source Code Pro
Caption12pxw500Circular
Overline11pxw500Source Code Pro
buttons· 3
Real DOM observations from supabase.comat crawl time. Backgrounds, paddings, borders, even the sample text all captured, none invented. Buttons sit on the brand's own canvas colour so transparent and translucent variants render the way they do on the live page.
Ghost70× observed
Primary53× observed
Secondary1× observed
spacing· 14
base unit · 4px
- 4px
- 8px
- 12px
- 16px
- 20px
- 24px
- 32px
- 40px
- 48px
- 64px
- 80px
- 96px
- 112px
- 128px
max content width: 100%
border radius· 11
9999px
259× used
8px
134× used
6px
123× used
16px
110× used
12px
74× used
11px
72× used
0px 0px 4px 4px
6× used
4px
2× used
12px 0px 0px 12px
1× used
9px 9px 0px 0px
1× used
0px 12px 12px 0px
1× used
shadows· 4
complex-stack24× used
rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0pxcomplex-stack2× used
rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4pxcomplex-stack1× used
rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1pxcomplex-stack1× used
rgb(255, 255, 255) 0px 0px 0px 0px, rgba(147, 197, 253, 0.5) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4px
cards
Reference card patterns composed from supabase.com's extracted canvas + hairline + signature shadow + base radius. Useful as a recipe when an agent rebuilds the brand style; not pretending these specific layouts were captured from the DOM.
Interactive demo
Explore the interactive demo
This demonstration shows how easy of use and instant insights empower teams to make quick, confident decisions the canonical product-tile layout this brand uses on its marketing surface.
Take the interactive demo
Brand newsroom
Editorial tile feature recipe with icon, eyebrow, and inline CTA.
Read the blog
links
1 variant captured
Ghost394× observed
also captured
The engine identified these additional component groups in the page DOM. They aren't rendered visually here because structural components (footer, navigation) need their containing layout to display meaningfully and the engine doesn't yet capture that.
- Badge1 variant
- Card2 variants
- Footer2 variants
- Navigation1 variant
- Input1 variant
DESIGN.md
examples/supabase/DESIGN.md
· 319 linesDesign System: Supabase
1. Visual Theme & Atmosphere
Supabase's website is a dark-mode-native developer platform that channels the aesthetic of a premium code editor -- deep black backgrounds (#171717) with emerald green accents (#3ecf8e) that reference the brand's open-source, PostgreSQL-green identity. The design system feels like it was born in a terminal window and evolved into a marketing surface without losing its developer credibility.
The typography is built on Circular -- a geometric sans-serif with rounded terminals that softens the technical edge. At 72px with a 1.00 line-height, the hero text is compressed to its absolute minimum vertical space, creating dense statements that waste nothing. The monospace companion (Source Code Pro) appears for uppercase technical labels, creating the "developer console" markers that connect the marketing site to the product experience.
What makes Supabase distinctive is its border-defined depth system. In a dark interface where shadows are functionally invisible, Supabase communicates elevation through a precisely calibrated gray border hierarchy -- from barely-visible #242424 through standard #2e2e2e (frequency: 25,197 uses) to prominent #393939. The green accent (#3ecf8e) appears selectively -- in the logo, in link colors (#00c573), and in border highlights -- always as an identity signal rather than decoration. Pill-shaped buttons (9999px radius) for primary CTAs contrast with standard 6px radius for secondary elements, encoding importance into geometry.
Key Characteristics:
- Dark-mode-native: near-black backgrounds (
#0f0f0f,#171717) -- never pure black, never gray - Emerald green brand accent (
#3ecf8e,#00c573) used sparingly as identity marker, not decoration Circulargeometric sans-serif with rounded terminals -- the humanizing element in a technical interfaceSource Code Profor uppercase labels withtext-transform: uppercase-- the developer console voice- Hero text at 72px with 1.00 line-height -- zero-leading as typographic signature
- Weight restraint: 400 for nearly everything, 500 only for navigation and buttons -- hierarchy through size, not weight
- Border-defined depth:
#242424(subtle) through#2e2e2e(standard) to#393939(prominent) replaces shadows entirely - Pill buttons (
9999px) for primary CTAs,6pxradius for functional elements -- importance encoded in geometry - Neutral gray scale from
#171717through#898989to#fafafawith no warm or cool bias - Tailwind CSS with Radix UI primitives -- utility-first with accessible component foundations
2. Color Palette & Roles
Brand
- Supabase Green (
#3ecf8e): Primary brand color, logo accent, feature highlights. A mid-saturation emerald that reads as technical and organic simultaneously -- PostgreSQL's identity evolved into a brand signal. - Green Link (
#00c573): Interactive green for links and actions. Deeper and more saturated than the brand green, creating a clear distinction between decorative and interactive uses. - Deep Green (
#006239): Dark green used for background fills on green-accented elements. The deepest member of the green scale, appearing behind lighter green text. - Light Green (
#85e0ba): Lighter green variant for pricing tier highlights and secondary green text. Provides AAA contrast (8.64:1) against the standard border color#2e2e2e.
Neutral Scale (Dark Mode)
- Near Black (
#0f0f0f): Deepest surface -- footer background, primary button fills. One step above pure black to retain screen texture. - Dark Canvas (
#171717): Page background, primary canvas, card fills. The dominant background color across all surfaces (441 background uses). - Elevated Dark (
#242424): Elevated surface backgrounds, horizontal rules, section dividers. The first visible step above the canvas. - Standard Border (
#2e2e2e): The workhorse border color (24,968 border uses). Card edges, tab outlines, section separators. The single most-used color token in the system. - Mid Border (
#363636): Button borders, prominent dividers, ghost card outlines. One step above standard for interactive element edges. - Light Border (
#393939): Secondary borders, input field outlines (672 border uses). The brightest border in the neutral system. - Dark Gray (
#4d4d4d): Heavy secondary text, muted body copy. Not quite readable enough for long-form but sufficient for labels and metadata. - Mid Gray (
#898989): Muted text, card body copy, tertiary links. The primary color for non-headline text (1,924 text uses). - Light Gray (
#b4b4b4): Secondary link text, sub-headings (1,174 text uses). Provides 8.65:1 contrast against#171717-- comfortably AAA. - Off White (
#fafafa): Primary text, button labels, hero copy. The brightest text color, used 7,888 times as text. Not pure white -- the 2% warmth prevents harshness on dark backgrounds.
Functional
- Pure Black (
#000000): Used exclusively for background fills (108 uses) and shadow color bases. Never appears as text. - Warning Amber (
#db8e00): Border color for warning states in pricing tiers. Appears only on the pricing page. - Focus Blue (
rgba(147, 197, 253, 0.5)): Focus ring shadow color. A soft blue at 50% opacity for keyboard navigation indicators.
3. Typography Rules
Font Family
- Primary:
Circular, with fallbacks:custom-font, Helvetica Neue, Helvetica, Arial - Monospace:
Source Code Pro, with fallbacks:Office Code Pro, Menlo
Hierarchy
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Display Hero | Circular | 72px (4.50rem) | 400 | 1.00 (tight) | normal | Maximum density, zero leading |
| Price Display | Source Code Pro | 48px (3.00rem) | 400 | 1.00 (tight) | normal | Pricing page headline numbers |
| Section Heading | Circular | 36px (2.25rem) | 400 | 1.11 | normal | Feature section titles |
| Tier Label | Source Code Pro | 36px (2.25rem) | 400 | 1.11 | normal | Pricing tier names, text-transform: uppercase |
| Sub-section Heading | Circular | 30px (1.88rem) | 400 | 1.20 | normal | Secondary section titles |
| Card Title | Circular | 24px (1.50rem) | 400 | 1.33 | -0.16px | Slight negative tracking |
| Card Title Medium | Circular | 24px (1.50rem) | 500 | 1.33 | normal | Emphasized card titles |
| Tier Label Small | Source Code Pro | 24px (1.50rem) | 400 | 1.33 | normal | text-transform: uppercase |
| Sub-heading | Circular | 18px (1.13rem) | 400 | 1.56 | normal | Body-adjacent headings |
| Body | Circular | 16px (1.00rem) | 400 | 1.50 | normal | Standard body text, base size |
| Nav Link | Circular | 14px (0.88rem) | 500 | 1.43 | normal | Navigation items, button labels |
| Caption | Circular | 14px (0.88rem) | 400 | 1.43 | normal | Metadata, tags, descriptions |
| Small Body | Circular | 13px (0.81rem) | 400 | 1.50 | normal | Pricing details, feature lists |
| Small | Circular | 12px (0.75rem) | 400 | 1.33 | normal | Fine print, footer links, badges |
| Table Header | Circular | 12px (0.75rem) | 500 | 1.33 | normal | Data table column headers |
| Code Label | Source Code Pro | 12px (0.75rem) | 400 | 1.33 | normal | text-transform: uppercase |
| Micro Label | Source Code Pro | 11px (0.69rem) | 500 | 1.10 | 0.66px | text-transform: uppercase, technical tags |
| Tier Label XS | Source Code Pro | 20px (1.25rem) | 400 | 1.40 | normal | text-transform: uppercase |
Principles
- Weight restraint: Nearly all text uses weight 400. Weight 500 appears only for navigation links, button labels, and table headers. Weight 700 appears exactly once (a monospace price callout). Hierarchy is built through size and color, not weight.
- 1.00 hero line-height: The hero text at 72px is compressed to absolute zero leading -- text that feels like a terminal command. This density is the defining typographic gesture.
- Negative tracking on cards: Card titles at 24px use
-0.16pxletter-spacing, a subtle tightening that differentiates them from body text without being obvious. - Monospace as ritual:
Source Code Proin uppercase creates the "developer console" voice -- used for pricing tier names, category labels, and technical markers that bridge marketing and product. - Geometric personality:
Circular's rounded terminals create warmth in what could otherwise be a cold, technical interface. The font is the humanizing element.
4. Component Stylings
Buttons
Ghost Button
- Background:
transparent - Text:
#fafafa, 14px weight 500 - Padding: 8px
- Radius:
6px - Border:
1px solid transparent - Transition:
0.2s cubic-bezier(0, 0, 0.2, 1) - Use: Navigation items ("Product", "Developers", "Solutions"), tertiary actions
Primary Button (Dark)
- Background:
#242424 - Text:
#fafafa, 12px weight 400 - Padding: 4px 10px
- Radius:
6px - Border:
1px solid #363636 - Transition:
0.2s cubic-bezier(0, 0, 0.2, 1) - Use: Header CTAs ("Sign in", "Start your project")
Secondary Button (Light)
- Background:
#fafafa - Text:
#121212, 12px weight 400 - Padding: 4px 10px
- Radius:
6px - Border:
1px solid #b4b4b4 - Transition:
0.2s cubic-bezier(0, 0, 0.2, 1) - Use: Inverted CTA ("Compare Plans")
Cards & Containers
Primary Card
- Background:
#171717 - Text:
#898989(body),#fafafa(title) - Padding: 24px 16px
- Radius:
11px - Border: none (edge defined by background contrast)
- Use: Feature cards ("Postgres Database", "Authentication", "Edge Functions")
Ghost Card
- Background:
transparent - Text:
#b4b4b4 - Padding: 16px
- Radius:
12px - Border:
1px solid #363636 - Use: Pricing estimate panels, secondary content containers
Badges
- Background:
#898989 - Text:
#898989 - Radius:
9999px(full pill) - Use: Status indicators, category markers
Inputs
- Background:
rgba(250, 250, 250, 0.027)-- near-transparent with the faintest white wash - Text:
#fafafa, 12px weight 400 - Padding: 8px
- Radius:
6px - Border:
1px solid #393939 - Use: Search fields, form inputs
Navigation
- Background:
transparenton dark page canvas - Text:
#fafafa, 16px weight 400 - Layout: horizontal with product dropdown
- Supabase logo with green icon left-aligned
- CTA buttons right-aligned ("Sign in", "Start your project")
- Sticky header behavior with border-bottom separation
Footer
- Background:
#0f0f0f-- the deepest surface in the system - Text:
#fafafa, 16px weight 400 - Multi-column layout with social links, product categories, and legal
- Full-width dark band that anchors the page
5. Layout Principles
Spacing System
- Base unit: 4px
- Scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 112, 128px
- Peak frequencies: 24px (938 uses), 8px (1,115 uses), 12px (572 uses), 16px (413 uses)
- Large section jumps: 80px (120 uses), 96px (38 uses), 128px (13 uses)
Grid & Container
- Full-width layout with constrained inner content
- Common column counts: 1, 2, 3, 4, 6, 7, 10, 12
- Feature grids: consistent card sizing within icon-based grids
- Logo grids for "Trusted by" sections
- Footer: multi-column on
#0f0f0fbackground
Whitespace Philosophy
- Dramatic section spacing: 80px-128px between major sections creates cinematic pacing -- each section is its own scene in the dark void
- Dense content blocks: Within sections, spacing is tight (16px-24px), creating concentrated information clusters that contrast with the vast inter-section gaps
- Border-defined separation: Instead of whitespace and shadows, Supabase uses thin borders (
#2e2e2e) on dark backgrounds -- separation through line, not gap
Border Radius Scale
- Micro (4px): Small internal elements
- Standard (6px): Buttons, inputs, functional elements
- Comfortable (8px): Cards, containers, table rows
- Mid (11px-12px): Feature cards, mid-size panels
- Large (16px): Major containers, feature sections
- Pill (9999px): Primary CTAs, badges, tab indicators
6. Depth & Elevation
| Level | Treatment | Use |
|---|---|---|
| Flat (Level 0) | No shadow, border #2e2e2e | Default state, most surfaces |
| Subtle (Level 1) | Border #363636 or #393939 | Interactive elements, inputs |
| Ambient (Level 2) | rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px | Subtle card lift |
| Elevated (Level 3) | rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4px | Dropdowns, popovers |
| Focus (Level 4) | rgb(255, 255, 255) 0px 0px 0px 0px, rgba(147, 197, 253, 0.5) 0px 0px 0px 0px + ambient stack | Focus states, keyboard navigation |
Shadow Philosophy: Supabase deliberately avoids shadows as a depth mechanism. In a dark-mode-native system, shadows cast onto near-black backgrounds are functionally invisible -- adding them achieves nothing and adds rendering cost. Instead, depth is communicated through a border hierarchy where #242424 reads as recessed, #2e2e2e as neutral, and #393939 as raised. The only meaningful shadow stack (rgba(0, 0, 0, 0.1) 0px 10px 15px -3px) appears on overlay elements like dropdowns where the content must visually detach from the page. Focus states use a blue-tinted ring (rgba(147, 197, 253, 0.5)) that signals interactivity without implying elevation.
6.5. Motion & Transitions
Duration Scale
| Token | Value | Use |
|---|---|---|
| Micro | 70ms | Opacity toggles, instant feedback |
| Standard | 180ms | Most interactive transitions (22 uses) |
| Medium | 200ms | Button state changes, color transitions |
| Slow | 500ms | Panel reveals, larger state changes |
Timing Functions
- Primary:
ease(21 uses) -- default for most transitions - Custom cubic:
cubic-bezier(0.4, 0, 0.2, 1)(18 uses) -- Material-style deceleration for button interactions - Ease in-out:
ease-in-out-- used sparingly for symmetrical animations
Keyframe Animations
- marquee-reverse (30s): Continuous horizontal scrolling for logo/partner strips
- sonner-spin (1.2s): Loading spinner with opacity pulsing
- bounce (1s): Transform-based bounce for attention indicators
- opacity-pulse: Skeleton loading state pulsing
- lineLoading (2.3s): Progress bar fill animation using
margin-leftandwidth
7. Do's and Don'ts
Do
- Use near-black backgrounds (
#0f0f0f,#171717) for all primary surfaces -- depth comes from the border hierarchy, not background variation - Apply Supabase green (
#3ecf8e,#00c573) sparingly -- it marks identity and interactivity, never fills backgrounds or large surfaces - Use
Circularat weight 400 for nearly everything -- 500 only for nav links and button labels, never 700 for body or headings - Set hero text to 1.00 line-height at 72px -- the zero-leading is the typographic signature, increasing it breaks the character
- Create depth through border color stepping (
#242424to#2e2e2eto#393939) -- three distinct elevation levels from border color alone - Use pill shape (
9999px) exclusively for primary CTAs and badges -- the geometry signals "this is actionable and important" - Use
Source Code Prouppercase for technical labels -- it connects the marketing surface to the developer product experience - Keep button transitions at
0.2s cubic-bezier(0, 0, 0.2, 1)-- the custom easing gives interactions a precise, engineered feel - Use
rgba(250, 250, 250, 0.027)for input backgrounds -- the near-invisible white wash distinguishes inputs from the void without adding visual noise - Space major sections at 80px-128px apart -- the dramatic gaps create cinematic pacing between content clusters
Don't
- Don't add
box-shadowfor depth on dark surfaces -- shadows are invisible on#171717backgrounds and break the border-defined depth system - Don't use weight 700 on
Circulartext -- the system caps at 500, and only for interactive elements. Hierarchy is size and color, not weight - Don't apply green (
#3ecf8e) to backgrounds or large surface fills -- it exists for borders, links, icons, and small accents only - Don't use pure black (
#000000) as a page background --#171717is the canonical canvas. Pure black appears only as a shadow base - Don't increase hero line-height above 1.00 -- the compressed density is intentional. Standard line-heights (1.25-1.50) would make the hero feel like every other landing page
- Don't use border radius values between 16px and 9999px -- the system jumps from large cards (16px) directly to full pill (9999px) with no intermediate stops
- Don't use warm accent colors (amber
#db8e00, reds) as design elements -- they are semantic tokens reserved for warning and error states - Don't forget the 4px base unit -- spacing should align to the scale (4, 8, 12, 16, 20, 24, 32, 48, 64, 80, 96, 128)
- Don't use
#898989for primary text -- it serves as muted body copy (contrast ratio 5.12:1 on#171717). Primary text is always#fafafa - Don't apply
ease-in-outas the default transition timing --cubic-bezier(0.4, 0, 0.2, 1)andeaseare the system standards
8. Responsive Behavior
Breakpoints
| Name | Width | Key Changes |
|---|---|---|
| Mobile | <640px | Single column, stacked layout, condensed nav |
| Tablet | 640-768px | Two-column grids begin, expanded horizontal spacing |
| Small Desktop | 768-1024px | Three-column feature grids, full navigation |
| Desktop | >1024px | Full multi-column grids, maximum section spacing |
Touch Targets
- Ghost buttons maintain 8px padding minimum for 44px effective touch area
- Primary buttons at 4px 10px padding require container-level touch expansion on mobile
- Navigation links need increased spacing in mobile hamburger layout
- Footer links at 12px
Circularneed vertical stacking with 12px minimum gap on mobile
Collapsing Strategy
- Hero: 72px display -> scales proportionally down to ~36px on mobile
- Feature grids: multi-column (3-4) -> single column stacked
- Logo row: horizontal marquee -> wrapped grid
- Navigation: full horizontal bar -> hamburger menu
- Section spacing: 80-128px -> 48-64px
- Buttons: inline pairs -> full-width stacked
- Pricing cards: side-by-side comparison -> vertically stacked with tabs
- Footer columns: multi-column -> single column accordion
Image Behavior
- Framework logo grids scale to maintain recognizable icon sizes
- Product screenshots maintain aspect ratio with max-width constraints
- Background gradients and decorative elements scale with viewport
- No observed art direction changes -- images scale uniformly
9. Agent Prompt Guide
Quick Color Reference
- Page background:
#171717 - Deepest surface:
#0f0f0f - Elevated surface:
#242424 - Primary text:
#fafafa - Secondary text:
#b4b4b4 - Muted text:
#898989 - Dark muted:
#4d4d4d - Standard border:
#2e2e2e - Prominent border:
#363636 - Input border:
#393939 - Brand green:
#3ecf8e - Link green:
#00c573
Example Component Prompts
- "Create a hero section on
#171717background. Headline at 72px Circular weight 400, line-height 1.00,#fafafatext. Sub-text at 16px Circular weight 400, line-height 1.50,#b4b4b4. Two pill CTA buttons side by side: primary (#242424bg,#fafafatext, 12px weight 400,6pxradius,1px solid #363636border, 4px 10px padding) and secondary (same but#fafafabg,#121212text,1px solid #b4b4b4border)." - "Design a feature card:
#171717background,11pxradius, 24px 16px padding. Title at 24px Circular weight 400, letter-spacing-0.16px,#fafafa. Body at 16px weight 400, line-height 1.50,#898989. No border, no shadow -- the card background creates contrast against the#0f0f0for darker section behind it." - "Build a navigation bar: transparent background over
#171717page. Supabase logo with green (#3ecf8e) icon left-aligned. Nav links at 14px Circular weight 500,#fafafa, 8px padding,6pxradius ghost buttons. Right side: 'Sign in' button (#242424bg,1px solid #363636,6pxradius, 4px 10px padding) and 'Start your project' button (same style). Sticky with border-bottom1px solid #2e2e2e." - "Create a pricing tier card:
#171717background,11pxradius, 24px 16px padding. Tier name in Source Code Pro 20px weight 400 uppercase,#fafafa. Price in Source Code Pro 48px weight 400,#fafafa. Body list in Circular 13px weight 400,#898989, 1.50 line-height. CTA button at bottom:#242424bg,6pxradius,1px solid #363636." - "Design a technical label component: Source Code Pro 12px weight 400, uppercase,
#898989text. Use for category markers like 'Customer Stories' or product names. Place above section headings with 8px bottom margin." - "Build a footer on
#0f0f0fbackground. Multi-column layout with category headings at 14px Circular weight 500,#fafafa. Links at 12px Circular weight 400,#898989. Social icons row. Green Supabase logo. Full-width with inner content constrained. Bottom row: copyright at 12px,#898989."
Iteration Guide
- Start with
#171717background -- everything is dark-mode-native, no light mode exists - Green (
#3ecf8e,#00c573) is the brand identity marker -- use it for the logo, links, and small accent borders only, never for backgrounds - Depth comes from borders (
#242424,#2e2e2e,#363636), not shadows -- three luminance steps encode three elevation levels - Weight 400 is the default for everything -- 500 only for nav links, buttons, and table headers. No bold (700) in the heading system
- Hero line-height of 1.00 is the signature -- all other text uses standard ratios (1.33-1.56)
- Pill (
9999px) for badges and status indicators,6pxfor buttons and inputs,11px-16pxfor cards - Button transitions use
0.2s cubic-bezier(0, 0, 0.2, 1)-- notease, notlinear Source Code Prouppercase is the developer voice -- use it for tier names, category labels, and technical markers only