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.
Request a demo Read docs for React
Card on extracted card recipe
Accent link: #0E7E4E · border rgba(0, 0, 0, 0.08)

Color palette (light mode)

RoleValueTailwindUsage
canvasBg#FDFDFDbg-[#FDFDFD]Primary Supabase page canvas
surfaceElevated#FFFFFFbg-whitePrimary elevated card & bento surface
surfaceSecondary#FDFDFDbg-[#FDFDFD]Secondary interactive container / hover fill
borderPrimaryrgba(0, 0, 0, 0.08)border-black/[0.08]Primary structural divider (1px rgba(0,0,0,0.08))
borderSecondaryrgba(0, 0, 0, 0.15)border-black/[0.15]Secondary nested module or pill border
textPrimary#030303text-[#030303]Hero H1, section H2 & high-contrast foreground
textMuted#696969text-[#696969]Lead paragraphs, descriptions & muted labels
accentPrimary#0E7E4Ebg-[#0E7E4E]Primary interactive CTA & brand highlight (8px)
accentSecondary#FDFDFDtext-[#FDFDFD]Secondary badge, syntax or telemetry highlight

Typography

Heading Manrope · body Inter / Manrope · mono Source Code Pro

LevelComputed spec
Hero H146px | 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 H334px | 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 Block13px | 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 familyMost frequent values (count on page)
Border radius10.6667px ×68 · 5.33333px ×27 · 21.3333px ×16 · 16px ×14 · 8px ×13 · 15px ×7
Box shadowrgba(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 gap8px ×72 · 16px ×22 · 4px ×13 · 12px ×8 · 32px ×7 · 20px ×7
Container max-width1280px ×10
Section vertical padding96px / 96px ×3 · 160px / 64px ×1 · 0px / 96px ×1 · 40px / 16px ×1
Easingcubic-bezier(0.4, 0, 0.2, 1) ×47 · cubic-bezier(0.22, 1, 0.36, 1) ×10 · ease-out ×2
Duration0.15s ×42 · 0.2s ×14 · 0.3s ×2 · 0.75s ×1

Component recipes

Buttons (6 distinct)

RenderedHeightPaddingRadiusBackground / TextBorderFont
Request a demo38px8px 16px9.29231px#FFFFFF
#030303
none14px / 500
Read docs for React30px6px 12px9999px#FFFFFF
#464646
1px solid rgba(0, 0, 0, 0.08)12px / 450
Product64px8px 10px8.86154pxtransparent
#030303
none14px / 500
Table Editor38px8px 32px9999px#FDFDFD
#030303
1px solid #03030314px / 450
Subscribe26px4px 10px8px#0E7E4E
#FAFCFB
none12px / 500

Cards (6 distinct)

#BackgroundBorderRadiusPaddingShadow
1#FDFDFD1px solid rgba(0, 0, 0, 0.08)21.3333px8px 8pxrgba(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
2transparent1px solid rgba(0, 0, 0, 0.08)8px0px 0pxnone
3#FFFFFF1px solid rgba(0, 0, 0, 0.08)10.6667px0px 0pxnone
4transparent1px solid rgba(0, 0, 0, 0.09)10.6667px 10.6667px 0px 0px0px 0pxrgba(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

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

Similar styles

Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.

See taste-skill Pro →