taste-skill / Style guides / Upstash style

How to build a UI in the Upstash style

Upstash (upstash.com) reads as Oversized Emerald Typography & Clean Serverless Daylight — Soft #F5F5F5 daylight canvas with #FFFFFF cards, deep forest-emerald #022C22 monumental 128px Inter Tight headlines (-0.025em), JetBrains Mono snippets, and #00BC7D 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://upstash.com on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Upstash is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Upstash.

Live preview with Upstash tokens

Upstash style · light
Ship the product, not the pixels.
Preview text rendered with the extracted Upstash canvas, text, muted and accent tokens.
Button QStash
Card on extracted card recipe
Accent link: #00BC7D · border rgba(0, 0, 0, 0.05)

Color palette (light mode)

RoleValueTailwindUsage
canvasBg#F5F5F5bg-[#F5F5F5]Primary Upstash page canvas
surfaceElevated#FFFFFFbg-whitePrimary elevated card & bento surface
surfaceSecondaryrgba(0, 115, 89, 0.08)bg-[rgba(0,115,89,0.08)]Secondary interactive container / hover fill
borderPrimaryrgba(0, 0, 0, 0.05)border-black/[0.05]Primary structural divider (1px rgba(0,0,0,0.05))
borderSecondaryrgba(255, 255, 255, 0.1)border-white/[0.1]Secondary nested module or pill border
textPrimary#022C22text-[#022C22]Hero H1, section H2 & high-contrast foreground
textMuted#71717Btext-[#71717B]Lead paragraphs, descriptions & muted labels
accentPrimary#00BC7Dbg-[#00BC7D]Primary interactive CTA & brand highlight (10px)
accentSecondary#00BC7Dtext-[#00BC7D]Secondary badge, syntax or telemetry highlight

Typography

Heading Inter Tight · body Inter · mono JetBrains Mono

LevelComputed spec
Hero H1128px | line-height 128px (leading-[1]) | letter-spacing -3.2px (tracking-[-0.025em]) | weight 700 (font-[700]) | color rgba(0, 0, 0, 0) (text-[rgba(0,0,0,0)]) | font Inter Tight
Section H2 (Primary)48px | line-height 48px (leading-[1]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #022C22 (text-[#022C22]) | font Inter Tight
Card / Feature H324px | line-height 32px (leading-[1.33]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #022C22 (text-[#022C22]) | font Inter Tight
Body Copy (Paragraph)16px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 400 (font-[400]) | color #71717B (text-[#71717B]) | font Inter
Monospace / Code Block13.8px | line-height 20.6px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 400 (font-[400]) | color #E4E4E7 (text-[#E4E4E7]) | font JetBrains Mono

Spacing, radius, depth and motion

Token familyMost frequent values (count on page)
Border radius35.2px ×41 · 12px ×18 · 16px ×7 · 16px 16px 0px 0px ×6 · 6px ×5 · 8px ×5
Box shadowrgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px ×28 · 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 -1px ×2 · rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(16, 185, 129, 0.3) 0px 0px 80px 0px ×1
Grid / flex gap8px ×40 · 16px ×9 · 4px ×7 · 2px ×7 · 12px ×7 · 32px ×5
Container max-width1280px ×7 · 768px ×5 · 1536px ×1 · 1080px ×1
Section vertical padding64px / 64px ×3 · 32px / 32px ×1 · 112px / 112px ×1 · 96px / 96px ×1
Easingcubic-bezier(0.4, 0, 0.2, 1) ×111 · cubic-bezier(0, 0, 0.2, 1) ×5 · cubic-bezier(0.4, 0, 1, 1) ×1
Duration0.15s ×93 · 0.3s ×16 · 0.2s ×5 · 0.5s ×3

Component recipes

Buttons (7 distinct)

RenderedHeightPaddingRadiusBackground / TextBorderFont
Button40px0px 20px10px#FFFFFF
#065F46
none16px / 500
QStash64px0px 32px16px 16px 0px 0px#F5F5F5
#71717B
2px solid rgba(0, 115, 89, 0.08)24px / 600
Explore Redis42px8px 20px12pxrgba(0, 115, 89, 0.08)
#007A55
none16px / 500
Documentation42px8px 20px12pxrgba(5, 95, 70, 0.2)
#007A55
none16px / 500
Create Database42px8px 20px12px#00BC7D
#FFFFFF
none16px / 500

Cards (3 distinct)

#BackgroundBorderRadiusPaddingShadow
1#F5F5F5none35.2px24px 48pxrgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, rgba(0, 0, 0, 0.1) 0px 2px 4px -2px
2#FFFFFFnone35.2px32px 32pxrgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px
3#FFFFFF1px solid rgba(0, 0, 0, 0.05)35.2px32px 32pxrgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px

Rules: what never to do in the Upstash style

Copy-paste kit

CSS variables
:root {
  /* Upstash style — extracted from upstash.com by taste-skill */
  --canvas: #F5F5F5;
  --surface: #FFFFFF;
  --text: #022C22;
  --text-muted: #71717B;
  --accent: #00BC7D;
  --border: rgba(0, 0, 0, 0.05);
  --font-heading: 'Inter Tight', Inter, system-ui, -apple-system, sans-serif;
  --font-body: Inter, Inter, system-ui, -apple-system, sans-serif;
  --font-mono: 'JetBrains Mono', 'JetBrains Mono', ui-monospace, monospace;
  --h1-size: 128px;
  --h1-tracking: -0.025em;
  --h1-weight: 700;
  --radius-button: 10px;
  --radius-common: 35.2px;
  --shadow-common: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --duration: 0.15s;
}
tailwind.config.js
// tailwind.config.js — Upstash style tokens (taste-skill)
module.exports = {
  theme: {
    extend: {
      colors: {
        canvas: "#F5F5F5",
        surface: "#FFFFFF",
        ink: "#022C22",
        muted: "#71717B",
        accent: "#00BC7D",
        line: "rgba(0, 0, 0, 0.05)",
      },
      fontFamily: {
        heading: ["Inter Tight", 'Inter', 'system-ui', 'sans-serif'],
        sans: ["Inter", 'Inter', 'system-ui', 'sans-serif'],
        mono: ["JetBrains Mono", 'ui-monospace', 'monospace'],
      },
      fontSize: { display: ["128px", { letterSpacing: "-0.025em", fontWeight: "700" }] },
      borderRadius: { button: "10px", card: "35.2px" },
      boxShadow: { brand: "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px 0px" },
      transitionTimingFunction: { brand: "cubic-bezier(0.4, 0, 0.2, 1)" },
    },
  },
};
.cursor/skills/upstash-style/SKILL.md
---
name: upstash-style
description: Build UI in the Upstash visual style (Oversized Emerald Typography & Clean Serverless Daylight). Use when the user asks for a Upstash-like look.
---

# Upstash Style — Quick Rules (source: upstash.com, extracted by taste-skill)

## Tokens
- canvasBg: #F5F5F5 — Primary Upstash page canvas
- surfaceElevated: #FFFFFF — Primary elevated card & bento surface
- surfaceSecondary: rgba(0, 115, 89, 0.08) — Secondary interactive container / hover fill
- borderPrimary: rgba(0, 0, 0, 0.05) — Primary structural divider (1px rgba(0,0,0,0.05))
- borderSecondary: rgba(255, 255, 255, 0.1) — Secondary nested module or pill border
- textPrimary: #022C22 — Hero H1, section H2 & high-contrast foreground
- textMuted: #71717B — Lead paragraphs, descriptions & muted labels
- accentPrimary: #00BC7D — Primary interactive CTA & brand highlight (10px)
- accentSecondary: #00BC7D — Secondary badge, syntax or telemetry highlight

## Typography
- Heading font: Inter Tight; body: Inter; mono: JetBrains Mono
- Hero H1: 128px | line-height 128px (leading-[1]) | letter-spacing -3.2px (tracking-[-0.025em]) | weight 700 (font-[700]) | color rgba(0, 0, 0, 0) (text-[rgba(0,0,0,0)]) | font Inter Tight
- Section H2 (Primary): 48px | line-height 48px (leading-[1]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #022C22 (text-[#022C22]) | font Inter Tight
- Card / Feature H3: 24px | line-height 32px (leading-[1.33]) | letter-spacing 0px (tracking-[0em]) | weight 600 (font-[600]) | color #022C22 (text-[#022C22]) | font Inter Tight
- Body Copy (Paragraph): 16px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 400 (font-[400]) | color #71717B (text-[#71717B]) | font Inter

## Components
- Primary button: height 40px, padding 0px 20px, radius 10px, bg #FFFFFF, text #065F46, 16px / 500
- Card: bg #F5F5F5, border none, radius 35.2px, padding 24px 48px

## Never
- NEVER substitute generic uncalibrated gray backgrounds for Upstash’s exact #F5F5F5 canvas and #FFFFFF surface pairing.
- NEVER replace Inter Tight display typography or ignore its signature scale (128px / -0.025em (w700)).
- NEVER use thick opaque borders that clash with rgba(0, 0, 0, 0.05) (1px rgba(0,0,0,0.05)).
- NEVER deviate from the signature button geometry (10px) or introduce off-brand saturated gradients.
- NEVER use default browser monospace when rendering code or telemetry—always pair with JetBrains Mono.

Full 120-line spec: https://taste-skill.pages.dev/taste/upstash/
Or install the full spec
npx taste-skill add upstash

Related

Similar styles

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

See taste-skill Pro →