seedflip
Archive
Mixtapes
Pricing
Sign in

Supabase Design System: The Green That Actually Works

Supabase's design system is anchored by a single accent color: #3ECF8E. A warm, saturated green that sits on dark backgrounds without looking neon. It carries the brand across marketing, dashboard, docs, and social. The lesson isn't "use green." It's that one strong accent, deployed consistently on a dark neutral base, creates more brand recognition than a full color palette.

Start with the Wavelength seed →

Green is hard to get right in UI design. Go too neon and it looks like a terminal from 1987. Go too muted and it disappears. Go too warm and it reads as “eco/sustainability.” Go too cool and it reads as “money/fintech.”

Supabase landed on #3ECF8E, a green that avoids all those traps. It's saturated enough to pop on dark backgrounds, warm enough to feel friendly rather than clinical, and distinct enough that you recognize it in a screenshot without seeing the logo. That's the definition of a successful brand color.

The Color System

Supabase's palette is narrow by design. A dark neutral base, the signature green, and a few functional colors. That's the entire system.

:root { /* Supabase-approximate color tokens */ /* The green */ --brand: #3ECF8E; --brand-light: #6EE7B7; --brand-dark: #1A7F4B; --brand-muted: rgba(62, 207, 142, 0.1); /* Dark backgrounds */ --background: #1C1C1C; --background-alt: #171717; --surface: #232323; --surface-hover: #2A2A2A; --surface-overlay: #2E2E2E; /* Text hierarchy */ --text-primary: #EDEDED; --text-secondary: #A1A1A1; --text-tertiary: #6B6B6B; /* Borders */ --border: rgba(255, 255, 255, 0.06); --border-strong: rgba(255, 255, 255, 0.12); /* Functional */ --error: #F56565; --warning: #F6AD55; --info: #63B3ED; }

The dark backgrounds are warmer than Vercel's (which uses pure neutral gray) but cooler than PostHog's (which has olive undertones). #1C1C1C is a balanced dark that gives the green room to breathe without competing for warmth.

Notice the border opacity: 6% for default, 12% for strong. Same range as Linear and Vercel. This is becoming the standard for dark developer tool UIs. Anything above 15% and borders start to feel heavy.

Where the Green Lives

The green isn't everywhere. That's why it works. In the marketing site, it appears on the logo, primary CTAs, and accent highlights. In the dashboard, it appears on success states, active tabs, and the sidebar indicator. In the docs, it's the link color and the code annotation highlight.

Where it does NOT appear: body text, backgrounds (except as a 10% opacity wash), borders, secondary buttons, or navigation items. The restraint creates scarcity. When you see the green, it means something. If it were on every surface, it would mean nothing.

One strong accent color on a restrained number of elements is a more effective brand strategy than a full rainbow palette distributed evenly. Your eye learns to look for the green. That's recognition built through consistency, not repetition.

Typography

Supabase uses a clean sans-serif stack for the UI and a generous monospace treatment for code.

/* Supabase-approximate type system */ :root { --font-sans: 'Circular', -apple-system, sans-serif; --font-mono: 'Source Code Pro', monospace; --text-xs: 12px; --text-sm: 13px; --text-base: 14px; --text-lg: 16px; --text-xl: 20px; --text-2xl: 28px; --text-3xl: 36px; --text-display: 56px; --leading-tight: 1.25; --leading-base: 1.5; --leading-relaxed: 1.7; --tracking-tight: -0.02em; --tracking-base: 0; }

Base body text at 14px is the developer tool standard (Linear, Vercel, and Stripe all do this). It reads as precise rather than small. The line height for code blocks is generous (1.7) because developers stare at code for long periods. Tight code is exhausting. Generous code is scannable.

The marketing display type goes up to 56px with tight tracking (-0.02em). Not as extreme as Vercel (which goes to 64px at -0.04em) but still assertive. Supabase's headlines feel approachable where Vercel's feel stark. The tracking difference is a big part of that.

Code Block Styling

This is where Supabase separates from most developer tools. Their code blocks are designed as first-class UI elements, not afterthoughts.

/* Supabase-approximate code block tokens */ .code-block { background: #171717; border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 8px; padding: 24px; font-family: var(--font-mono); font-size: 13px; line-height: 1.7; color: #EDEDED; overflow-x: auto; } .code-block .keyword { color: #3ECF8E; } .code-block .string { color: #F6AD55; } .code-block .comment { color: #6B6B6B; } .code-block .function { color: #63B3ED; }

The background is slightly darker than the page background, creating subtle depth. Padding is generous (24px, not 16px). The syntax highlighting palette reuses the brand green for keywords, which reinforces the color association even inside code examples. This is smart. Every code block on the site becomes a subtle brand touchpoint.

Shape and Depth

:root { /* Supabase-approximate shape tokens */ --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px; --radius-full: 9999px; /* Shadows: minimal, close-range */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.35); }

Radius is moderate. Not sharp like Vercel (0-4px) and not round like most consumer apps (12-16px). The 6-8px range feels approachable for a developer tool. Buttons use --radius-md, cards use --radius-lg, inputs use --radius-sm.

Shadows are dark and close. On a dark background, shadows use high opacity because they need to read against an already-dark surface. A rgba(0,0,0,0.06) shadow that works beautifully on white is completely invisible on #1C1C1C. Supabase pushes shadow opacity to 25-35%, which creates the same perceptual depth that 5-10% creates on light backgrounds.

The Docs Aesthetic

Supabase's documentation is a significant brand asset. The dark theme, generous code blocks, and clear navigation make developers want to spend time there. A few things set it apart:

Sidebar navigation uses the green for active state indicators (a thin left border or background wash). Inactive items use --text-tertiary. The contrast between active and inactive is dramatic, which makes navigation effortless.

Inline code uses a darker background with subtle green-tinted text for SQL keywords and function names. This creates a visual language where “Supabase things” (database operations) are tinted green and “generic things” (variables, strings) use neutral colors.

Callout boxes use the brand-muted color (rgba(62, 207, 142, 0.1)) as the background with a green left border. Warnings use the same pattern with amber. The consistency is tight: one accent color, applied the same way across every context.

The Lesson

Supabase proves that a single accent color, applied with restraint and consistency, builds stronger brand recognition than a diverse palette. #3ECF8E on dark backgrounds. On buttons, links, active states, syntax highlights, and callout borders. Nowhere else.

The suspicion you had was right: one strong accent color is better than a full rainbow palette. The rainbow distributes attention. The single color concentrates it.

Featured developer-forward dark seed
Wavelength
Deep space developer energy
Inter+Inter
darkvibrantdeveloper
View seed →

Start with a seed that understands the one-accent-on-dark pattern. Build something that doesn't need a second color.


For another dark-first design system analysis, read Ghost CMS Design System. For the theory behind dark mode color choices, see Dark Mode Color System: The Complete Guide.

Ready to stop guessing?

One flip. Complete design system. Free CSS export.

Start with the Wavelength seed →