taste-skill / Style guides / Supabase style
How to build a UI in the Supabase style
Supabase (supabase.com) reads as Postgres Emerald Technical Clarity & Clean Modular Bento — Crisp #FDFDFD canvas with rgba(0,0,0,0.08) hairline bento modules, geometric Manrope headings, Source Code Pro SQL snippets, and signature #0E7E4E / #3ECF8E Postgres emerald accents. This guide turns its extracted computed styles into an implementation kit: a live preview, the exact palette and type scale, real button and card recipes, the rules to avoid, and drop-in CSS variables, Tailwind config and a Cursor / Claude Code SKILL.md snippet.
Source: computed styles extracted from
https://supabase.com on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Supabase is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Supabase.Live preview with Supabase tokens
Supabase style · light
Ship the product, not the pixels.
Preview text rendered with the extracted Supabase canvas, text, muted and accent tokens.
Card on extracted card recipe
Accent link: #0E7E4E · border
rgba(0, 0, 0, 0.08)Color palette (light mode)
| Role | Value | Tailwind | Usage |
|---|---|---|---|
| canvasBg | #FDFDFD | bg-[#FDFDFD] | Primary Supabase page canvas |
| surfaceElevated | #FFFFFF | bg-white | Primary elevated card & bento surface |
| surfaceSecondary | #FDFDFD | bg-[#FDFDFD] | Secondary interactive container / hover fill |
| borderPrimary | rgba(0, 0, 0, 0.08) | border-black/[0.08] | Primary structural divider (1px rgba(0,0,0,0.08)) |
| borderSecondary | rgba(0, 0, 0, 0.15) | border-black/[0.15] | Secondary nested module or pill border |
| textPrimary | #030303 | text-[#030303] | Hero H1, section H2 & high-contrast foreground |
| textMuted | #696969 | text-[#696969] | Lead paragraphs, descriptions & muted labels |
| accentPrimary | #0E7E4E | bg-[#0E7E4E] | Primary interactive CTA & brand highlight (8px) |
| accentSecondary | #FDFDFD | text-[#FDFDFD] | Secondary badge, syntax or telemetry highlight |
Typography
Heading Manrope · body Inter / Manrope · mono Source Code Pro
| Level | Computed spec |
|---|---|
| Hero H1 | 46px | line-height 46px (leading-[1]) | letter-spacing 0px (tracking-[0em]) | weight 500 (font-[500]) | color #030303 (text-[#030303]) | font Manrope |
| Section H2 (Primary) | 34px | line-height 37.8px (leading-[1.11]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #030303 (text-[#030303]) | font Manrope |
| Card / Feature H3 | 34px | line-height 37.8px (leading-[1.11]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #696969 (text-[#696969]) | font Manrope |
| Body Copy (Paragraph) | 16px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 450 (font-[450]) | color #696969 (text-[#696969]) | font Inter |
| Monospace / Code Block | 13px | line-height 22.1px (leading-[1.7]) | letter-spacing 0px (tracking-[0em]) | weight 500 (font-[500]) | color #525252 (text-[#525252]) | font Source Code Pro |
Spacing, radius, depth and motion
| Token family | Most frequent values (count on page) |
|---|---|
| Border radius | 10.6667px ×68 · 5.33333px ×27 · 21.3333px ×16 · 16px ×14 · 8px ×13 · 15px ×7 |
| Box shadow | rgba(255, 255, 255, 0.12) 0px 0px 0px 1px inset ×5 · 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 0px, oklab(0.999994 0.0000455678 0.0000200868 / 0.3) 0px 0px 0px 1px, rgba(0, 0, 0, 0) 0px 0px 0px 0px ×5 · 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 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 3px 0px, rgba(0, 0, 0, 0.027) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.04) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.04) 0px -1px 0px 0px inset, rgba(0, 0, 0, 0.067) 0px 0px 0px 1px inset ×4 |
| Grid / flex gap | 8px ×72 · 16px ×22 · 4px ×13 · 12px ×8 · 32px ×7 · 20px ×7 |
| Container max-width | 1280px ×10 |
| Section vertical padding | 96px / 96px ×3 · 160px / 64px ×1 · 0px / 96px ×1 · 40px / 16px ×1 |
| Easing | cubic-bezier(0.4, 0, 0.2, 1) ×47 · cubic-bezier(0.22, 1, 0.36, 1) ×10 · ease-out ×2 |
| Duration | 0.15s ×42 · 0.2s ×14 · 0.3s ×2 · 0.75s ×1 |
Component recipes
Buttons (6 distinct)
| Rendered | Height | Padding | Radius | Background / Text | Border | Font |
|---|---|---|---|---|---|---|
| Request a demo | 38px | 8px 16px | 9.29231px | #FFFFFF#030303 | none | 14px / 500 |
| Read docs for React | 30px | 6px 12px | 9999px | #FFFFFF#464646 | 1px solid rgba(0, 0, 0, 0.08) | 12px / 450 |
| Product | 64px | 8px 10px | 8.86154px | transparent#030303 | none | 14px / 500 |
| Table Editor | 38px | 8px 32px | 9999px | #FDFDFD#030303 | 1px solid #030303 | 14px / 450 |
| Subscribe | 26px | 4px 10px | 8px | #0E7E4E#FAFCFB | none | 12px / 500 |
Cards (6 distinct)
| # | Background | Border | Radius | Padding | Shadow |
|---|---|---|---|---|---|
| 1 | #FDFDFD | 1px solid rgba(0, 0, 0, 0.08) | 21.3333px | 8px 8px | 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 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 -4px |
| 2 | transparent | 1px solid rgba(0, 0, 0, 0.08) | 8px | 0px 0px | none |
| 3 | #FFFFFF | 1px solid rgba(0, 0, 0, 0.08) | 10.6667px | 0px 0px | none |
| 4 | transparent | 1px solid rgba(0, 0, 0, 0.09) | 10.6667px 10.6667px 0px 0px | 0px 0px | 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 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 -4px |
Rules: what never to do in the Supabase style
- NEVER substitute generic uncalibrated gray backgrounds for Supabase’s exact
#FDFDFDcanvas and#FFFFFFsurface pairing. - NEVER replace
Manropedisplay typography or ignore its signature scale (46px / 0em (w500)). - NEVER use thick opaque borders that clash with
rgba(0, 0, 0, 0.08)(1px rgba(0,0,0,0.08)). - NEVER deviate from the signature button geometry (
8px) or introduce off-brand saturated gradients. - NEVER use default browser monospace when rendering code or telemetry—always pair with
Source Code Pro.
Copy-paste kit
CSS variables
:root {
/* Supabase style — extracted from supabase.com by taste-skill */
--canvas: #FDFDFD;
--surface: #FFFFFF;
--text: #030303;
--text-muted: #696969;
--accent: #0E7E4E;
--border: rgba(0, 0, 0, 0.08);
--font-heading: Manrope, Inter, system-ui, -apple-system, sans-serif;
--font-body: 'Inter / Manrope', Inter, system-ui, -apple-system, sans-serif;
--font-mono: 'Source Code Pro', 'JetBrains Mono', ui-monospace, monospace;
--h1-size: 46px;
--h1-tracking: 0em;
--h1-weight: 500;
--radius-button: 9.29231px;
--radius-common: 10.6667px;
--shadow-common: rgba(255, 255, 255, 0.12) 0px 0px 0px 1px inset;
--ease: cubic-bezier(0.4, 0, 0.2, 1);
--duration: 0.15s;
}tailwind.config.js
// tailwind.config.js — Supabase style tokens (taste-skill)
module.exports = {
theme: {
extend: {
colors: {
canvas: "#FDFDFD",
surface: "#FFFFFF",
ink: "#030303",
muted: "#696969",
accent: "#0E7E4E",
line: "rgba(0, 0, 0, 0.08)",
},
fontFamily: {
heading: ["Manrope", 'Inter', 'system-ui', 'sans-serif'],
sans: ["Inter / Manrope", 'Inter', 'system-ui', 'sans-serif'],
mono: ["Source Code Pro", 'ui-monospace', 'monospace'],
},
fontSize: { display: ["46px", { letterSpacing: "0em", fontWeight: "500" }] },
borderRadius: { button: "9.29231px", card: "10.6667px" },
boxShadow: { brand: "rgba(255, 255, 255, 0.12) 0px 0px 0px 1px inset" },
transitionTimingFunction: { brand: "cubic-bezier(0.4, 0, 0.2, 1)" },
},
},
};.cursor/skills/supabase-style/SKILL.md
--- name: supabase-style description: Build UI in the Supabase visual style (Postgres Emerald Technical Clarity & Clean Modular Bento). Use when the user asks for a Supabase-like look. --- # Supabase Style — Quick Rules (source: supabase.com, extracted by taste-skill) ## Tokens - canvasBg: #FDFDFD — Primary Supabase page canvas - surfaceElevated: #FFFFFF — Primary elevated card & bento surface - surfaceSecondary: #FDFDFD — Secondary interactive container / hover fill - borderPrimary: rgba(0, 0, 0, 0.08) — Primary structural divider (1px rgba(0,0,0,0.08)) - borderSecondary: rgba(0, 0, 0, 0.15) — Secondary nested module or pill border - textPrimary: #030303 — Hero H1, section H2 & high-contrast foreground - textMuted: #696969 — Lead paragraphs, descriptions & muted labels - accentPrimary: #0E7E4E — Primary interactive CTA & brand highlight (8px) - accentSecondary: #FDFDFD — Secondary badge, syntax or telemetry highlight ## Typography - Heading font: Manrope; body: Inter / Manrope; mono: Source Code Pro - Hero H1: 46px | line-height 46px (leading-[1]) | letter-spacing 0px (tracking-[0em]) | weight 500 (font-[500]) | color #030303 (text-[#030303]) | font Manrope - Section H2 (Primary): 34px | line-height 37.8px (leading-[1.11]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #030303 (text-[#030303]) | font Manrope - Card / Feature H3: 34px | line-height 37.8px (leading-[1.11]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #696969 (text-[#696969]) | font Manrope - Body Copy (Paragraph): 16px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 450 (font-[450]) | color #696969 (text-[#696969]) | font Inter ## Components - Primary button: height 38px, padding 8px 16px, radius 9.29231px, bg #FFFFFF, text #030303, 14px / 500 - Card: bg #FDFDFD, border 1px solid rgba(0, 0, 0, 0.08), radius 21.3333px, padding 8px 8px ## Never - NEVER substitute generic uncalibrated gray backgrounds for Supabase’s exact #FDFDFD canvas and #FFFFFF surface pairing. - NEVER replace Manrope display typography or ignore its signature scale (46px / 0em (w500)). - NEVER use thick opaque borders that clash with rgba(0, 0, 0, 0.08) (1px rgba(0,0,0,0.08)). - NEVER deviate from the signature button geometry (8px) or introduce off-brand saturated gradients. - NEVER use default browser monospace when rendering code or telemetry—always pair with Source Code Pro. Full 120-line spec: https://taste-skill.pages.dev/taste/supabase/
Or install the full spec
npx taste-skill add supabase
Related
Supabase full token specSupabase ButtonsSupabase CardsSupabase Pricing TableSupabase vs NeonVercel vs SupabaseSupabase vs UpstashSupabase vs PlanetScaleSupabase vs Clerk
Similar styles
Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.
See taste-skill Pro →