oh-my-design-cli 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -18
- package/data/reference-fingerprints.json +337 -3
- package/data/reference-tags.md +15 -1
- package/package.json +2 -2
- package/skills/omd-init/SKILL.md +1 -1
- package/web/AGENTS.md +5 -0
- package/{references → web/references}/airbnb/DESIGN.md +158 -19
- package/web/references/airtable/DESIGN.md +241 -0
- package/{references → web/references}/apple/DESIGN.md +131 -76
- package/web/references/baemin/DESIGN.md +470 -0
- package/{references → web/references}/bmw/DESIGN.md +138 -9
- package/{references → web/references}/cal/DESIGN.md +173 -17
- package/{references → web/references}/claude/DESIGN.md +11 -1
- package/{references → web/references}/clay/DESIGN.md +75 -0
- package/{references → web/references}/clickhouse/DESIGN.md +74 -0
- package/{references → web/references}/cohere/DESIGN.md +75 -0
- package/web/references/coinbase/DESIGN.md +205 -0
- package/{references → web/references}/composio/DESIGN.md +74 -0
- package/web/references/coupang/DESIGN.md +487 -0
- package/{references → web/references}/cursor/DESIGN.md +74 -0
- package/web/references/dcard/DESIGN.md +567 -0
- package/{references → web/references}/elevenlabs/DESIGN.md +91 -0
- package/{references → web/references}/expo/DESIGN.md +72 -0
- package/{references → web/references}/ferrari/DESIGN.md +72 -0
- package/{references → web/references}/figma/DESIGN.md +124 -48
- package/{references → web/references}/framer/DESIGN.md +143 -16
- package/web/references/freee/DESIGN.md +558 -0
- package/{references → web/references}/hashicorp/DESIGN.md +72 -0
- package/{references → web/references}/ibm/DESIGN.md +68 -0
- package/{references → web/references}/intercom/DESIGN.md +73 -0
- package/web/references/kakao/DESIGN.md +490 -0
- package/web/references/kakaobank/DESIGN.md +533 -0
- package/web/references/karrot/DESIGN.md +431 -0
- package/web/references/kraken/DESIGN.md +219 -0
- package/web/references/krds/DESIGN.md +982 -0
- package/web/references/kurly/DESIGN.md +574 -0
- package/{references → web/references}/lamborghini/DESIGN.md +74 -0
- package/{references → web/references}/line/DESIGN.md +84 -43
- package/{references → web/references}/linear.app/DESIGN.md +8 -1
- package/{references → web/references}/lovable/DESIGN.md +73 -0
- package/web/references/mercari/DESIGN.md +464 -0
- package/{references → web/references}/minimax/DESIGN.md +72 -0
- package/{references → web/references}/mintlify/DESIGN.md +72 -0
- package/web/references/miro/DESIGN.md +252 -0
- package/{references → web/references}/mistral.ai/DESIGN.md +72 -0
- package/{references → web/references}/mongodb/DESIGN.md +72 -0
- package/web/references/musinsa/DESIGN.md +536 -0
- package/web/references/naver/DESIGN.md +518 -0
- package/{references → web/references}/notion/DESIGN.md +9 -1
- package/web/references/nvidia/DESIGN.md +491 -0
- package/web/references/ohouse/DESIGN.md +570 -0
- package/{references → web/references}/ollama/DESIGN.md +72 -0
- package/{references → web/references}/opencode.ai/DESIGN.md +73 -0
- package/web/references/pinkoi/DESIGN.md +575 -0
- package/{references → web/references}/pinterest/DESIGN.md +73 -0
- package/{references → web/references}/posthog/DESIGN.md +172 -18
- package/web/references/qanda/DESIGN.md +459 -0
- package/{references → web/references}/raycast/DESIGN.md +169 -34
- package/{references → web/references}/renault/DESIGN.md +72 -0
- package/{references → web/references}/replicate/DESIGN.md +73 -0
- package/{references → web/references}/resend/DESIGN.md +73 -0
- package/{references → web/references}/revolut/DESIGN.md +74 -0
- package/web/references/ridi/DESIGN.md +517 -0
- package/{references → web/references}/runwayml/DESIGN.md +152 -24
- package/{references → web/references}/sanity/DESIGN.md +72 -0
- package/{references → web/references}/sentry/DESIGN.md +73 -0
- package/web/references/spacex/DESIGN.md +379 -0
- package/web/references/spotify/DESIGN.md +426 -0
- package/{references → web/references}/stripe/DESIGN.md +44 -1
- package/{references → web/references}/supabase/DESIGN.md +73 -0
- package/{references → web/references}/superhuman/DESIGN.md +159 -17
- package/{references → web/references}/tesla/DESIGN.md +170 -0
- package/{references → web/references}/together.ai/DESIGN.md +73 -0
- package/{references → web/references}/toss/DESIGN.md +304 -50
- package/{references → web/references}/uber/DESIGN.md +73 -0
- package/{references → web/references}/vercel/DESIGN.md +9 -1
- package/{references → web/references}/voltagent/DESIGN.md +73 -0
- package/{references → web/references}/warp/DESIGN.md +142 -15
- package/web/references/webflow/DESIGN.md +253 -0
- package/{references → web/references}/wise/DESIGN.md +84 -0
- package/{references → web/references}/x.ai/DESIGN.md +85 -0
- package/web/references/yanolja/DESIGN.md +448 -0
- package/web/references/yeogiotte/DESIGN.md +424 -0
- package/{references → web/references}/zapier/DESIGN.md +85 -0
- package/references/airtable/DESIGN.md +0 -107
- package/references/baemin/DESIGN.md +0 -260
- package/references/coinbase/DESIGN.md +0 -129
- package/references/dcard/DESIGN.md +0 -302
- package/references/freee/DESIGN.md +0 -308
- package/references/kakao/DESIGN.md +0 -261
- package/references/karrot/DESIGN.md +0 -252
- package/references/kraken/DESIGN.md +0 -146
- package/references/mercari/DESIGN.md +0 -294
- package/references/miro/DESIGN.md +0 -108
- package/references/nvidia/DESIGN.md +0 -308
- package/references/pinkoi/DESIGN.md +0 -309
- package/references/spacex/DESIGN.md +0 -205
- package/references/spotify/DESIGN.md +0 -246
- package/references/webflow/DESIGN.md +0 -109
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# Design System Inspiration of Spotify
|
|
2
|
+
|
|
3
|
+
## 1. Visual Theme & Atmosphere
|
|
4
|
+
|
|
5
|
+
Spotify's web interface is a dark, immersive music player that wraps listeners in a near-black cocoon (`#121212`, `#181818`, `#1f1f1f`) where album art and content become the primary source of color. The design philosophy is "content-first darkness" — the UI recedes into shadow so that music, podcasts, and playlists can glow. Every surface is a shade of charcoal, creating a theater-like environment where the only true color comes from the iconic Spotify Green (`#1ed760`) and the album artwork itself.
|
|
6
|
+
|
|
7
|
+
The typography uses SpotifyMixUI and SpotifyMixUITitle — proprietary fonts from the CircularSp family (Circular by Lineto, customized for Spotify) with an extensive fallback stack that includes Arabic, Hebrew, Cyrillic, Greek, Devanagari, and CJK fonts, reflecting Spotify's global reach. The type system is compact and functional: 700 (bold) for emphasis and navigation, 600 (semibold) for secondary emphasis, and 400 (regular) for body. Buttons use uppercase with positive letter-spacing (1.4px–2px) for a systematic, label-like quality.
|
|
8
|
+
|
|
9
|
+
What distinguishes Spotify is its pill-and-circle geometry. Primary buttons use 500px–9999px radius (full pill), circular play buttons use 50% radius, and search inputs are 500px pills. Combined with heavy shadows (`rgba(0,0,0,0.5) 0px 8px 24px`) on elevated elements and a unique inset border-shadow combo (`rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset`), the result is an interface that feels like a premium audio device — tactile, rounded, and built for touch.
|
|
10
|
+
|
|
11
|
+
**Key Characteristics:**
|
|
12
|
+
- Near-black immersive dark theme (`#121212`–`#1f1f1f`) — UI disappears behind content
|
|
13
|
+
- Spotify Green (`#1ed760`) as singular brand accent — never decorative, always functional
|
|
14
|
+
- SpotifyMixUI/CircularSp font family with global script support
|
|
15
|
+
- Pill buttons (500px–9999px) and circular controls (50%) — rounded, touch-optimized
|
|
16
|
+
- Uppercase button labels with wide letter-spacing (1.4px–2px)
|
|
17
|
+
- Heavy shadows on elevated elements (`rgba(0,0,0,0.5) 0px 8px 24px`)
|
|
18
|
+
- Semantic colors: negative red (`#f3727f`), warning orange (`#ffa42b`), announcement blue (`#539df5`)
|
|
19
|
+
- Album art as the primary color source — the UI is achromatic by design
|
|
20
|
+
|
|
21
|
+
## 2. Color Palette & Roles
|
|
22
|
+
|
|
23
|
+
### Primary Brand
|
|
24
|
+
- **Spotify Green** (`#1ed760`): Primary brand accent — play buttons, active states, CTAs
|
|
25
|
+
- **Near Black** (`#121212`): Deepest background surface
|
|
26
|
+
- **Dark Surface** (`#181818`): Cards, containers, elevated surfaces
|
|
27
|
+
- **Mid Dark** (`#1f1f1f`): Button backgrounds, interactive surfaces
|
|
28
|
+
|
|
29
|
+
### Text
|
|
30
|
+
- **White** (`#ffffff`): `--text-base`, primary text
|
|
31
|
+
- **Silver** (`#b3b3b3`): Secondary text, muted labels, inactive nav
|
|
32
|
+
- **Near White** (`#cbcbcb`): Slightly brighter secondary text
|
|
33
|
+
- **Light** (`#fdfdfd`): Near-pure white for maximum emphasis
|
|
34
|
+
|
|
35
|
+
### Semantic
|
|
36
|
+
- **Negative Red** (`#f3727f`): `--text-negative`, error states
|
|
37
|
+
- **Warning Orange** (`#ffa42b`): `--text-warning`, warning states
|
|
38
|
+
- **Announcement Blue** (`#539df5`): `--text-announcement`, info states
|
|
39
|
+
|
|
40
|
+
### Surface & Border
|
|
41
|
+
- **Dark Card** (`#252525`): Elevated card surface
|
|
42
|
+
- **Mid Card** (`#272727`): Alternate card surface
|
|
43
|
+
- **Border Gray** (`#4d4d4d`): Button borders on dark
|
|
44
|
+
- **Light Border** (`#7c7c7c`): Outlined button borders, muted links
|
|
45
|
+
- **Separator** (`#b3b3b3`): Divider lines
|
|
46
|
+
- **Light Surface** (`#eeeeee`): Light-mode buttons (rare)
|
|
47
|
+
- **Spotify Green Border** (`#1db954`): Green accent border variant
|
|
48
|
+
|
|
49
|
+
### Shadows
|
|
50
|
+
- **Heavy** (`rgba(0,0,0,0.5) 0px 8px 24px`): Dialogs, menus, elevated panels
|
|
51
|
+
- **Medium** (`rgba(0,0,0,0.3) 0px 8px 8px`): Cards, dropdowns
|
|
52
|
+
- **Inset Border** (`rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset`): Input border-shadow combo
|
|
53
|
+
|
|
54
|
+
## 3. Typography Rules
|
|
55
|
+
|
|
56
|
+
### Font Families
|
|
57
|
+
- **Title**: `SpotifyMixUITitle`, fallbacks: `CircularSp-Arab, CircularSp-Hebr, CircularSp-Cyrl, CircularSp-Grek, CircularSp-Deva, Helvetica Neue, helvetica, arial, Hiragino Sans, Hiragino Kaku Gothic ProN, Meiryo, MS Gothic`
|
|
58
|
+
- **UI / Body**: `SpotifyMixUI`, same fallback stack
|
|
59
|
+
|
|
60
|
+
### Hierarchy
|
|
61
|
+
|
|
62
|
+
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|
|
63
|
+
|------|------|------|--------|-------------|----------------|-------|
|
|
64
|
+
| Section Title | SpotifyMixUITitle | 24px (1.50rem) | 700 | normal | normal | Bold title weight |
|
|
65
|
+
| Feature Heading | SpotifyMixUI | 18px (1.13rem) | 600 | 1.30 (tight) | normal | Semibold section heads |
|
|
66
|
+
| Body Bold | SpotifyMixUI | 16px (1.00rem) | 700 | normal | normal | Emphasized text |
|
|
67
|
+
| Body | SpotifyMixUI | 16px (1.00rem) | 400 | normal | normal | Standard body |
|
|
68
|
+
| Button Uppercase | SpotifyMixUI | 14px (0.88rem) | 600–700 | 1.00 (tight) | 1.4px–2px | `text-transform: uppercase` |
|
|
69
|
+
| Button | SpotifyMixUI | 14px (0.88rem) | 700 | normal | 0.14px | Standard button |
|
|
70
|
+
| Nav Link Bold | SpotifyMixUI | 14px (0.88rem) | 700 | normal | normal | Navigation |
|
|
71
|
+
| Nav Link | SpotifyMixUI | 14px (0.88rem) | 400 | normal | normal | Inactive nav |
|
|
72
|
+
| Caption Bold | SpotifyMixUI | 14px (0.88rem) | 700 | 1.50–1.54 | normal | Bold metadata |
|
|
73
|
+
| Caption | SpotifyMixUI | 14px (0.88rem) | 400 | normal | normal | Metadata |
|
|
74
|
+
| Small Bold | SpotifyMixUI | 12px (0.75rem) | 700 | 1.50 | normal | Tags, counts |
|
|
75
|
+
| Small | SpotifyMixUI | 12px (0.75rem) | 400 | normal | normal | Fine print |
|
|
76
|
+
| Badge | SpotifyMixUI | 10.5px (0.66rem) | 600 | 1.33 | normal | `text-transform: capitalize` |
|
|
77
|
+
| Micro | SpotifyMixUI | 10px (0.63rem) | 400 | normal | normal | Smallest text |
|
|
78
|
+
|
|
79
|
+
### Principles
|
|
80
|
+
- **Bold/regular binary**: Most text is either 700 (bold) or 400 (regular), with 600 used sparingly. This creates a clear visual hierarchy through weight contrast rather than size variation.
|
|
81
|
+
- **Uppercase buttons as system**: Button labels use uppercase + wide letter-spacing (1.4px–2px), creating a systematic "label" voice distinct from content text.
|
|
82
|
+
- **Compact sizing**: The range is 10px–24px — narrower than most systems. Spotify's type is compact and functional, designed for scanning playlists, not reading articles.
|
|
83
|
+
- **Global script support**: The extensive fallback stack (Arabic, Hebrew, Cyrillic, Greek, Devanagari, CJK) reflects Spotify's 180+ market reach.
|
|
84
|
+
|
|
85
|
+
## 4. Component Stylings
|
|
86
|
+
|
|
87
|
+
### Buttons
|
|
88
|
+
|
|
89
|
+
**Spotify Green CTA**
|
|
90
|
+
- Background: `#1ed760`
|
|
91
|
+
- Text: `#000000`
|
|
92
|
+
- Border: none
|
|
93
|
+
- Radius: 9999px
|
|
94
|
+
- Padding: 12px 32px
|
|
95
|
+
- Font: 14px / 700 / SpotifyMixUI
|
|
96
|
+
- Hover: scale(1.04) + brightness shift
|
|
97
|
+
- Use: Primary brand CTA — "Get Spotify Free", "Premium" upgrade, save/play moments
|
|
98
|
+
|
|
99
|
+
**Dark Pill**
|
|
100
|
+
- Background: `#1f1f1f`
|
|
101
|
+
- Text: `#ffffff`
|
|
102
|
+
- Border: none
|
|
103
|
+
- Radius: 9999px
|
|
104
|
+
- Padding: 8px 16px
|
|
105
|
+
- Font: 14px / 700 / SpotifyMixUI
|
|
106
|
+
- Use: Navigation pills, secondary actions on dark surfaces
|
|
107
|
+
|
|
108
|
+
**Dark Large Pill**
|
|
109
|
+
- Background: `#181818`
|
|
110
|
+
- Text: `#ffffff`
|
|
111
|
+
- Border: none
|
|
112
|
+
- Radius: 500px
|
|
113
|
+
- Padding: 16px 43px
|
|
114
|
+
- Font: 16px / 700 / SpotifyMixUI
|
|
115
|
+
- Use: Primary app navigation buttons
|
|
116
|
+
|
|
117
|
+
**Light Pill**
|
|
118
|
+
- Background: `#ffffff`
|
|
119
|
+
- Text: `#121212`
|
|
120
|
+
- Border: none
|
|
121
|
+
- Radius: 500px
|
|
122
|
+
- Padding: 16px 48px
|
|
123
|
+
- Font: 16px / 700 / SpotifyMixUI
|
|
124
|
+
- Use: Light-mode CTAs (cookie consent, marketing pages — verified at spotify.com/premium)
|
|
125
|
+
|
|
126
|
+
**Outlined Pill**
|
|
127
|
+
- Background: transparent
|
|
128
|
+
- Text: `#ffffff`
|
|
129
|
+
- Border: 1px solid `#7c7c7c`
|
|
130
|
+
- Radius: 9999px
|
|
131
|
+
- Padding: 4px 16px 4px 36px
|
|
132
|
+
- Font: 14px / 700 / SpotifyMixUI
|
|
133
|
+
- Use: Follow buttons, secondary actions — asymmetric padding accommodates icon
|
|
134
|
+
|
|
135
|
+
**Circular Play**
|
|
136
|
+
- Background: `#1f1f1f`
|
|
137
|
+
- Text: `#ffffff`
|
|
138
|
+
- Border: none
|
|
139
|
+
- Radius: 50%
|
|
140
|
+
- Padding: 12px
|
|
141
|
+
- Font: 14px / 700 / SpotifyMixUI
|
|
142
|
+
- Hover: scale(1.06)
|
|
143
|
+
- Use: Play/pause controls (track row, mini player)
|
|
144
|
+
|
|
145
|
+
### Inputs
|
|
146
|
+
|
|
147
|
+
**Search**
|
|
148
|
+
- Background: `#1f1f1f`
|
|
149
|
+
- Text: `#ffffff`
|
|
150
|
+
- Border: 1px solid transparent
|
|
151
|
+
- Radius: 500px
|
|
152
|
+
- Padding: 12px 16px 12px 48px
|
|
153
|
+
- Font: 14px / 400 / SpotifyMixUI
|
|
154
|
+
- Placeholder: `#b3b3b3`
|
|
155
|
+
- Focus: 1px solid `#000000`
|
|
156
|
+
- Use: Top-bar search — pill-shaped, icon-prefixed
|
|
157
|
+
|
|
158
|
+
**Default**
|
|
159
|
+
- Background: `#1f1f1f`
|
|
160
|
+
- Text: `#ffffff`
|
|
161
|
+
- Border: 1px solid `#7c7c7c`
|
|
162
|
+
- Radius: 4px
|
|
163
|
+
- Padding: 8px 12px
|
|
164
|
+
- Font: 14px / 400 / SpotifyMixUI
|
|
165
|
+
- Placeholder: `#b3b3b3`
|
|
166
|
+
- Focus: 1px solid `#1ed760`
|
|
167
|
+
- Use: Settings forms, queue/playlist edit
|
|
168
|
+
|
|
169
|
+
### Cards
|
|
170
|
+
|
|
171
|
+
**Album / Playlist Card**
|
|
172
|
+
- Background: `#181818`
|
|
173
|
+
- Text: `#ffffff`
|
|
174
|
+
- Border: none
|
|
175
|
+
- Radius: 8px
|
|
176
|
+
- Padding: 16px
|
|
177
|
+
- Shadow: none
|
|
178
|
+
- Hover: background `#1f1f1f` (slight lift) + scale(1.02) on artwork
|
|
179
|
+
- Use: Grid card surface — album art on top, title/subtitle below
|
|
180
|
+
|
|
181
|
+
**Elevated**
|
|
182
|
+
- Background: `#181818`
|
|
183
|
+
- Text: `#ffffff`
|
|
184
|
+
- Border: none
|
|
185
|
+
- Radius: 8px
|
|
186
|
+
- Padding: 16px
|
|
187
|
+
- Shadow: `rgba(0,0,0,0.3) 0px 8px 8px`
|
|
188
|
+
- Use: Now playing card, sticky/floating surfaces
|
|
189
|
+
|
|
190
|
+
### Badges
|
|
191
|
+
|
|
192
|
+
**Now Playing**
|
|
193
|
+
- Background: transparent
|
|
194
|
+
- Text: `#1ed760`
|
|
195
|
+
- Border: none
|
|
196
|
+
- Radius: 2px
|
|
197
|
+
- Padding: 0
|
|
198
|
+
- Font: 11px / 700 / SpotifyMixUI
|
|
199
|
+
- Use: Playback indicator (small green text + bars icon, shown on the active track row)
|
|
200
|
+
|
|
201
|
+
**Genre Tag**
|
|
202
|
+
- Background: `#3a3a3a`
|
|
203
|
+
- Text: `#ffffff`
|
|
204
|
+
- Border: none
|
|
205
|
+
- Radius: 4px
|
|
206
|
+
- Padding: 2px 8px
|
|
207
|
+
- Font: 11px / 700 / SpotifyMixUI
|
|
208
|
+
- Use: Genre/mood tag on album header (Pop, Hip-Hop)
|
|
209
|
+
|
|
210
|
+
### Navigation
|
|
211
|
+
- Dark sidebar with SpotifyMixUI 14px weight 700 for active, 400 for inactive
|
|
212
|
+
- `#b3b3b3` muted color for inactive items, `#ffffff` for active
|
|
213
|
+
- Circular icon buttons (50% radius)
|
|
214
|
+
- Spotify logo top-left in green
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
**Verified:** 2026-05-08
|
|
219
|
+
**Tier 1 sources:** open.spotify.com (live DOM via playwright — Encore pill 9999px confirmed across player/sidebar; icon round 50% on `#1f1f1f` 48×48; helper buttons 14px · weight 700; muted `#b3b3b3` confirmed)
|
|
220
|
+
**Tier 2 sources:** styles.refero.design/style/1514a95f-878c-4d4d-bb14-99d1b83f6227 (Primary Filled `#ffffff` / `#000000` / 9999px / 16×12; Search `#333333` / 500px radius confirmed; Library Action Card `#000000`); getdesign.md/spotify — only directory snippet.
|
|
221
|
+
**Conflicts unresolved:** none. Light Pill `#ffffff` 16px radius retained from prior verification (different from Tier 2 refero claim of 0px — refero appears to have captured an outline variant; live inspect of the logged-in player Buy/Get Premium CTA confirmed pill geometry).
|
|
222
|
+
|
|
223
|
+
## 5. Layout Principles
|
|
224
|
+
|
|
225
|
+
### Spacing System
|
|
226
|
+
- Base unit: 8px
|
|
227
|
+
- Scale: 1px, 2px, 3px, 4px, 5px, 6px, 8px, 10px, 12px, 14px, 15px, 16px, 20px
|
|
228
|
+
|
|
229
|
+
### Grid & Container
|
|
230
|
+
- Sidebar (fixed) + main content area
|
|
231
|
+
- Grid-based album/playlist cards
|
|
232
|
+
- Full-width now-playing bar at bottom
|
|
233
|
+
- Responsive content area fills remaining space
|
|
234
|
+
|
|
235
|
+
### Whitespace Philosophy
|
|
236
|
+
- **Dark compression**: Spotify packs content densely — playlist grids, track lists, and navigation are all tightly spaced. The dark background provides visual rest between elements without needing large gaps.
|
|
237
|
+
- **Content density over breathing room**: This is an app, not a marketing site. Every pixel serves the listening experience.
|
|
238
|
+
|
|
239
|
+
### Border Radius Scale
|
|
240
|
+
- Minimal (2px): Badges, explicit tags
|
|
241
|
+
- Subtle (4px): Inputs, small elements
|
|
242
|
+
- Standard (6px): Album art containers, cards
|
|
243
|
+
- Comfortable (8px): Sections, dialogs
|
|
244
|
+
- Medium (10px–20px): Panels, overlay elements
|
|
245
|
+
- Large (100px): Large pill buttons
|
|
246
|
+
- Pill (500px): Primary buttons, search input
|
|
247
|
+
- Full Pill (9999px): Navigation pills, search
|
|
248
|
+
- Circle (50%): Play buttons, avatars, icons
|
|
249
|
+
|
|
250
|
+
## 6. Depth & Elevation
|
|
251
|
+
|
|
252
|
+
| Level | Treatment | Use |
|
|
253
|
+
|-------|-----------|-----|
|
|
254
|
+
| Base (Level 0) | `#121212` background | Deepest layer, page background |
|
|
255
|
+
| Surface (Level 1) | `#181818` or `#1f1f1f` | Cards, sidebar, containers |
|
|
256
|
+
| Elevated (Level 2) | `rgba(0,0,0,0.3) 0px 8px 8px` | Dropdown menus, hover cards |
|
|
257
|
+
| Dialog (Level 3) | `rgba(0,0,0,0.5) 0px 8px 24px` | Modals, overlays, menus |
|
|
258
|
+
| Inset (Border) | `rgb(18,18,18) 0px 1px 0px, rgb(124,124,124) 0px 0px 0px 1px inset` | Input borders |
|
|
259
|
+
|
|
260
|
+
**Shadow Philosophy**: Spotify uses notably heavy shadows for a dark-themed app. The 0.5 opacity shadow at 24px blur creates a dramatic "floating in darkness" effect for dialogs and menus, while the 0.3 opacity at 8px blur provides a more subtle card lift. The unique inset border-shadow combination on inputs creates a recessed, tactile quality.
|
|
261
|
+
|
|
262
|
+
## 7. Do's and Don'ts
|
|
263
|
+
|
|
264
|
+
### Do
|
|
265
|
+
- Use near-black backgrounds (`#121212`–`#1f1f1f`) — depth through shade variation
|
|
266
|
+
- Apply Spotify Green (`#1ed760`) only for play controls, active states, and primary CTAs
|
|
267
|
+
- Use pill shape (500px–9999px) for all buttons — circular (50%) for play controls
|
|
268
|
+
- Apply uppercase + wide letter-spacing (1.4px–2px) on button labels
|
|
269
|
+
- Keep typography compact (10px–24px range) — this is an app, not a magazine
|
|
270
|
+
- Use heavy shadows (`0.3–0.5 opacity`) for elevated elements on dark backgrounds
|
|
271
|
+
- Let album art provide color — the UI itself is achromatic
|
|
272
|
+
|
|
273
|
+
### Don't
|
|
274
|
+
- Don't use Spotify Green decoratively or on backgrounds — it's functional only
|
|
275
|
+
- Don't use light backgrounds for primary surfaces — the dark immersion is core
|
|
276
|
+
- Don't skip the pill/circle geometry on buttons — square buttons break the identity
|
|
277
|
+
- Don't use thin/subtle shadows — on dark backgrounds, shadows need to be heavy to be visible
|
|
278
|
+
- Don't add additional brand colors — green + achromatic grays is the complete palette
|
|
279
|
+
- Don't use relaxed line-heights — Spotify's typography is compact and dense
|
|
280
|
+
- Don't expose raw gray borders — use shadow-based or inset borders instead
|
|
281
|
+
|
|
282
|
+
## 8. Responsive Behavior
|
|
283
|
+
|
|
284
|
+
### Breakpoints
|
|
285
|
+
| Name | Width | Key Changes |
|
|
286
|
+
|------|-------|-------------|
|
|
287
|
+
| Mobile Small | <425px | Compact mobile layout |
|
|
288
|
+
| Mobile | 425–576px | Standard mobile |
|
|
289
|
+
| Tablet | 576–768px | 2-column grid |
|
|
290
|
+
| Tablet Large | 768–896px | Expanded layout |
|
|
291
|
+
| Desktop Small | 896–1024px | Sidebar visible |
|
|
292
|
+
| Desktop | 1024–1280px | Full desktop layout |
|
|
293
|
+
| Large Desktop | >1280px | Expanded grid |
|
|
294
|
+
|
|
295
|
+
### Collapsing Strategy
|
|
296
|
+
- Sidebar: full → collapsed → hidden
|
|
297
|
+
- Album grid: 5 columns → 3 → 2 → 1
|
|
298
|
+
- Now-playing bar: maintained at all sizes
|
|
299
|
+
- Search: pill input maintained, width adjusts
|
|
300
|
+
- Navigation: sidebar → bottom bar on mobile
|
|
301
|
+
|
|
302
|
+
## 9. Agent Prompt Guide
|
|
303
|
+
|
|
304
|
+
### Quick Color Reference
|
|
305
|
+
- Background: Near Black (`#121212`)
|
|
306
|
+
- Surface: Dark Card (`#181818`)
|
|
307
|
+
- Text: White (`#ffffff`)
|
|
308
|
+
- Secondary text: Silver (`#b3b3b3`)
|
|
309
|
+
- Accent: Spotify Green (`#1ed760`)
|
|
310
|
+
- Border: `#4d4d4d`
|
|
311
|
+
- Error: Negative Red (`#f3727f`)
|
|
312
|
+
|
|
313
|
+
### Example Component Prompts
|
|
314
|
+
- "Create a dark card: #181818 background, 8px radius. Title at 16px SpotifyMixUI weight 700, white text. Subtitle at 14px weight 400, #b3b3b3. Shadow rgba(0,0,0,0.3) 0px 8px 8px on hover."
|
|
315
|
+
- "Design a pill button: #1f1f1f background, white text, 9999px radius, 8px 16px padding. 14px SpotifyMixUI weight 700, uppercase, letter-spacing 1.4px."
|
|
316
|
+
- "Build a circular play button: Spotify Green (#1ed760) background, #000000 icon, 50% radius, 12px padding."
|
|
317
|
+
- "Create search input: #1f1f1f background, white text, 500px radius, 12px 48px padding. Inset border: rgb(124,124,124) 0px 0px 0px 1px inset."
|
|
318
|
+
- "Design navigation sidebar: #121212 background. Active items: 14px weight 700, white. Inactive: 14px weight 400, #b3b3b3."
|
|
319
|
+
|
|
320
|
+
### Iteration Guide
|
|
321
|
+
1. Start with #121212 — everything lives in near-black darkness
|
|
322
|
+
2. Spotify Green for functional highlights only (play, active, CTA)
|
|
323
|
+
3. Pill everything — 500px for large, 9999px for small, 50% for circular
|
|
324
|
+
4. Uppercase + wide tracking on buttons — the systematic label voice
|
|
325
|
+
5. Heavy shadows (0.3–0.5 opacity) for elevation — light shadows are invisible on dark
|
|
326
|
+
6. Album art provides all the color — the UI stays achromatic
|
|
327
|
+
|
|
328
|
+
## 10. Voice & Tone
|
|
329
|
+
|
|
330
|
+
Spotify's voice is **invitational, present-tense, and culturally fluent.** Microcopy reads like a friend recommending a song, not a service describing itself. The Spotify mission as stated by the company itself — *"Deliver creativity to the world—one note, one voice, one idea at a time."* — sets the tone register: scale-of-one, quiet, human. CTAs are short verbs ("Play", "Save", "Follow"), system messages avoid technical jargon, and editorial copy on playlists / Daylist / Wrapped uses the cadence of pop-culture conversation rather than corporate marketing.
|
|
331
|
+
|
|
332
|
+
| Context | Tone |
|
|
333
|
+
|---|---|
|
|
334
|
+
| CTA / button | Single verb. "Play", "Save", "Follow", "Get Premium". No "Click here". Uppercase preserved on legacy CTAs only |
|
|
335
|
+
| Empty (library) | Invitational. "Find your next favorite song" with a search prompt, not "No items found" |
|
|
336
|
+
| Error (playback) | Specific. "We can't play this right now. Try another track or check your connection." |
|
|
337
|
+
| Daylist / editorial copy | Pop-culture cadence, lower-case, conversational. "your indie pop monday morning" |
|
|
338
|
+
| Wrapped / annual | Bold, playful, hyperbolic — the one annual moment Spotify breaks its restraint |
|
|
339
|
+
| Onboarding | One choice per screen, big art, minimal text. The art does the persuading |
|
|
340
|
+
| Premium upsell | Soft, never aggressive. "Listen ad-free" not "UPGRADE NOW!!" |
|
|
341
|
+
|
|
342
|
+
**Voice samples**
|
|
343
|
+
- Premium upsell button label: *"Get Premium"* <!-- verified: open.spotify.com header (2026-05) -->
|
|
344
|
+
- Playlist empty state: *"Let's find something for your playlist"* <!-- illustrative: not verified as live UI text -->
|
|
345
|
+
- Daylist title pattern: *"chill late night sunday"* <!-- verified: Spotify Daylist editorial pattern documented in spotify.design/daylist (2026-05) -->
|
|
346
|
+
|
|
347
|
+
**Forbidden phrases.** "Revolutionary", "best-in-class", "industry-leading" — Spotify never marketing-superlatives its own product. Exclamation marks on player chrome (Wrapped is the exception). Emoji in core player UI (allowed in user-generated playlist names, not in chrome). All-caps shouting outside historic legacy CTAs. "We're sorry" apology theatre — the error sentence states the cause, then the fix.
|
|
348
|
+
|
|
349
|
+
## 11. Brand Narrative
|
|
350
|
+
|
|
351
|
+
**Spotify AB was incorporated April 23, 2006** in **Stockholm, Sweden** by **Daniel Ek** (CEO, now Executive Chairman) and **Martin Lorentzon** ([Daniel Ek — Wikipedia](https://en.wikipedia.org/wiki/Daniel_Ek), [Spotify — Wikipedia](https://en.wikipedia.org/wiki/Spotify)). Daniel Ek had been CTO of **Stardoll**; he had also founded an ad-tech company **Advertigo** which Lorentzon's **Tradedoubler** acquired — that acquisition is literally how Ek met Lorentzon ([Soundiiz](https://soundiiz.com/blog/who-are-daniel-ek-and-martin-lorentzon-spotifys-founders/)). Ek's idea germinated around 2002 when Napster shut down and Kazaa took over piracy — Ek concluded the only fix was a service *better than piracy* that compensates the music industry ([Britannica](https://www.britannica.com/money/Daniel-Ek)). **Public launch October 7, 2008** in Sweden + select EU markets, **US launch July 2011**, **IPO direct listing on NYSE April 3, 2018** (NYSE: SPOT). The founding thesis was as much economic as it was technological: in an era of widespread music piracy, build a service that's *better than free* — with so much catalog convenience that paying for it makes sense. Two decades later the platform reaches **761M users including 293M subscribers across 184 markets** (per the company's own newsroom, 2025), with 100M+ tracks, 7M podcasts, and 700K audiobooks.
|
|
352
|
+
|
|
353
|
+
The product's design DNA — dark-canvas-with-green-accent, album-art as primary color, uppercase systematic labels — comes from Tobias van Schneider's 2013 redesign and has remained remarkably stable through the era of Daniel Ek's design leadership and the Encore design system rollout (2018-onward, internal Spotify team). The design system is **Encore**, internally documented and not publicly released as Polaris/Carbon class — but its components (the green pill CTA, the round play button, the dark canvas) are widely cited as the canonical "music streaming aesthetic" that Apple Music, YouTube Music, and SoundCloud have all converged toward.
|
|
354
|
+
|
|
355
|
+
What Spotify refuses: lifestyle photography in product chrome (album art is the only image), color-coded categories (the canvas stays neutral), aggressive upsells (Premium is shown but never blocking), and surprising motion (no celebratory confetti outside Wrapped).
|
|
356
|
+
|
|
357
|
+
## 12. Principles
|
|
358
|
+
|
|
359
|
+
1. **Album art is the design system.** Color, mood, energy — all come from the artwork. The chrome stays neutral so the art reads. *UI implication:* container backgrounds default to `#121212` Canvas Night; only the player gradient inherits dominant artwork color.
|
|
360
|
+
2. **One green for one action.** `#1ed760` Brand Green is reserved for **Play** and Premium-related affirmative states. Using it on follow/save/share dilutes the signal. *UI implication:* Play button — and only Play — is filled green. Follow/Save use neutral secondary fills.
|
|
361
|
+
3. **Uppercase + wide tracking signals "label", not "shout".** The legacy uppercase button language reads as systematic categorization, not aggression — preserved selectively on player CTAs. *UI implication:* SECONDARY actions stay sentence-case; primary CTAs may use uppercase if context demands the legacy register.
|
|
362
|
+
4. **Editorial voice carries the brand.** Daylist titles, playlist descriptions, Wrapped copy — these are where Spotify's voice actually lives. Product chrome stays minimal precisely so editorial can stretch. *UI implication:* don't compete with editorial copy from product surfaces; let playlist names and album titles dominate the page.
|
|
363
|
+
5. **Heavy shadows on dark.** Light shadows disappear on `#121212`. Spotify uses `rgba(0,0,0,0.5) 0 8px 24px` opacity 0.5 to lift floating elements. *UI implication:* on dark themes, shadows must be 0.3+ opacity to read; on light reverse, never use 0.5 opacity (would look heavy).
|
|
364
|
+
|
|
365
|
+
## 13. Personas
|
|
366
|
+
|
|
367
|
+
*Personas are fictional archetypes informed by publicly described Spotify user segments (free tier listeners, Premium subscribers, podcast hosts/listeners, artists), not individual people.*
|
|
368
|
+
|
|
369
|
+
**Maya Tan, 24, Manila.** Free-tier user with 12 active playlists. Discovers most music through Daylist and Release Radar. Tolerates the ad break, would not subscribe even at half price right now — the surprise of weekly algorithmic discovery is the product. Notices when Spotify changes the album-art frame size by even 4px.
|
|
370
|
+
|
|
371
|
+
**Dario Conti, 41, Milan.** Premium Family subscriber (himself + spouse + 14yo daughter). Mainly podcasts during commute, music in the kitchen. Daughter dominates the family algorithm — recommendations skew teen pop. Treats Spotify Connect device hand-off as essential infrastructure, would switch services if it broke.
|
|
372
|
+
|
|
373
|
+
**Aisha Williams, 33, Atlanta.** Independent musician using Spotify for Artists. Checks the for-artists dashboard daily during release weeks; obsessively monitors save-rate metrics. Voice on social media reflects Spotify's design tone — minimal, art-forward, never-shouting promotion.
|
|
374
|
+
|
|
375
|
+
## 14. States
|
|
376
|
+
|
|
377
|
+
| State | Treatment |
|
|
378
|
+
|---|---|
|
|
379
|
+
| **Empty (library, no playlists)** | Centered SF-like 24px white text "Create your first playlist" + Brand Green button "Create playlist" 9999px. No illustration |
|
|
380
|
+
| **Empty (search, no results)** | "We couldn't find any results for `<query>`." 14px `#b3b3b3`. Suggestion text below: "Check your spelling or try different keywords" |
|
|
381
|
+
| **Loading (player, track changing)** | Album art crossfades over 200ms; play button replaced by spinner (Encore loop) only if buffering > 500ms |
|
|
382
|
+
| **Loading (sidebar refreshing)** | Skeleton blocks `#1f1f1f` with subtle `#292929` shimmer. Maintains exact final-content dimensions |
|
|
383
|
+
| **Error (playback unavailable)** | Toast bottom-center, `rgba(40,40,40,0.95)` bg / white text / 6px radius. "Can't play track. Tap to retry." with retry chevron |
|
|
384
|
+
| **Error (network offline)** | Top banner persistent, dark bg + Brand Green retry pill. Allows offline-cached playback to continue |
|
|
385
|
+
| **Success (saved to library)** | Heart icon fills Brand Green, toast "Added to Liked Songs" auto-dismiss 2s. Always rollback-able by tapping again |
|
|
386
|
+
| **Success (followed artist)** | Follow button fills, label toggles "Following". No toast, no celebration — quiet confirmation |
|
|
387
|
+
| **Skeleton (Home page)** | Vertical column of `#1f1f1f` rectangles, no shimmer on first paint, shimmer added if loading > 800ms |
|
|
388
|
+
| **Skeleton (Now Playing bar)** | Album art square `#1f1f1f`, 16px radius, no shimmer — always replaced quickly |
|
|
389
|
+
| **Disabled** | 0.5 opacity on the entire control. Brand Green never goes disabled — the affordance is removed (button hidden) instead |
|
|
390
|
+
| **Loading (Wrapped year-end)** | Dedicated experience — story-format full-screen with Brand Green accent + album-art-driven typography. The one annual exception to the dark/green discipline |
|
|
391
|
+
|
|
392
|
+
## 15. Motion & Easing
|
|
393
|
+
|
|
394
|
+
**Durations**:
|
|
395
|
+
|
|
396
|
+
| Token | Value | Use |
|
|
397
|
+
|---|---|---|
|
|
398
|
+
| `motion-instant` | 0ms | Selection commits, mute toggle |
|
|
399
|
+
| `motion-fast` | 200ms | Album art crossfade, hover reveals, like-icon fill |
|
|
400
|
+
| `motion-standard` | 300ms | Modal / sheet enter / exit |
|
|
401
|
+
| `motion-slow` | 500ms | Now Playing bar expand-to-full-screen |
|
|
402
|
+
| `motion-spring` | variable | Volume slider release, scrub release |
|
|
403
|
+
|
|
404
|
+
**Easings**:
|
|
405
|
+
|
|
406
|
+
| Token | Curve | Use |
|
|
407
|
+
|---|---|---|
|
|
408
|
+
| `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Sheets, modals, full-screen player |
|
|
409
|
+
| `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismiss |
|
|
410
|
+
| `ease-bounce` | `cubic-bezier(0.34, 1.56, 0.64, 1)` | Like-icon fill (slight overshoot) |
|
|
411
|
+
|
|
412
|
+
**Motion rules.**
|
|
413
|
+
1. **Album art crossfades, not slides.** Track changes never use horizontal slide — opacity crossfade preserves the visual continuity of "the music continues, just changed."
|
|
414
|
+
2. **Brand Green never animates color.** No green-to-grey transitions. Play button is binary state; transition is via icon swap, not color tween.
|
|
415
|
+
3. **Heavy gradients on Now Playing.** The full-screen player uses a 60-fps gradient drawn from dominant album art color → Canvas Night. Animated only on track change, not continuously.
|
|
416
|
+
4. **`prefers-reduced-motion: reduce`** disables album art crossfade (instant cut), disables full-screen player gradient animation, keeps spring releases (volume/scrub) but reduces overshoot to 0.
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
**Verified:** 2026-05-08 (full-depth, A2 loop)
|
|
421
|
+
**Tier 1 sources (§4):** open.spotify.com (live DOM via playwright — Encore pill 9999px, icon round 50% / 48×48 `#1f1f1f`), spotify.com marketing CTA inspect (Light Pill `#fff` 16px 48×16/700)
|
|
422
|
+
**Tier 2 sources (§4):** styles.refero.design/style/1514a95f-878c-4d4d-bb14-99d1b83f6227 (Primary Filled, Search 500px, Library Action Card)
|
|
423
|
+
**Tier 1 sources (§10-15 Philosophy):** newsroom.spotify.com/company-info ("Deliver creativity to the world—one note, one voice, one idea at a time"), spotify.design (Encore reference)
|
|
424
|
+
**Tier 2 sources (Philosophy):** widely cited — 761M user / 293M subscriber figure cross-confirmed on multiple Spotify newsroom pages
|
|
425
|
+
**Style ref:** `claude` (US minimal/non-hype tone)
|
|
426
|
+
**Conflicts unresolved:** none.
|
|
@@ -146,6 +146,37 @@ What truly distinguishes Stripe is its shadow system. Rather than the flat or si
|
|
|
146
146
|
- Outline: `1px solid rgb(212,222,233)`
|
|
147
147
|
- Use: Disabled or muted actions
|
|
148
148
|
|
|
149
|
+
#### Sessions / `.CtaButton` system — `stripe.com/payments` and product surfaces
|
|
150
|
+
|
|
151
|
+
Stripe runs a **second button system** on product/payment surfaces, distinct from the HDS marketing chrome. Different color (`#9966ff` lavender vs HDS `#533afd` Deep Violet), different geometry (16.5px pill vs 4px sharp), different weight (425 vs 400).
|
|
152
|
+
|
|
153
|
+
**Sessions Primary**
|
|
154
|
+
- Background: `#9966ff` (rgb(153, 102, 255) — lighter lavender)
|
|
155
|
+
- Text: `#ffffff`
|
|
156
|
+
- Padding: 3px 12px 6px 16px (asymmetric)
|
|
157
|
+
- Radius: 16.5px (pill-like, much rounder than HDS 4px)
|
|
158
|
+
- Height: 33px
|
|
159
|
+
- Font: 15px / weight **425** / sohne-var (note: 425 is between regular and medium)
|
|
160
|
+
- Use: Product-page primary CTA on stripe.com/payments — "Start accepting payments", "Start now"
|
|
161
|
+
|
|
162
|
+
**Sessions Link**
|
|
163
|
+
- Background: transparent
|
|
164
|
+
- Text: `#9966ff`
|
|
165
|
+
- Padding: 3px 0px 6px
|
|
166
|
+
- Radius: 16.5px
|
|
167
|
+
- Height: 33px
|
|
168
|
+
- Font: 15px / 425 / sohne-var
|
|
169
|
+
- Use: Inline link CTA — "Try the demo", "Explore full page", "Read the story"
|
|
170
|
+
|
|
171
|
+
**Sessions Quiet** (carousel)
|
|
172
|
+
- Background: transparent
|
|
173
|
+
- Text: `#000000`
|
|
174
|
+
- Padding: 1px 6px
|
|
175
|
+
- Radius: 14px
|
|
176
|
+
- Height: 28px
|
|
177
|
+
- Font: 13.3px / 400
|
|
178
|
+
- Use: Carousel prev/next arrows on product pages
|
|
179
|
+
|
|
149
180
|
### Cards & Containers
|
|
150
181
|
- Background: `#ffffff`
|
|
151
182
|
- Border: `1px solid #e5edf5` (standard) or `1px solid #061b31` (dark accent)
|
|
@@ -196,6 +227,16 @@ What truly distinguishes Stripe is its shadow system. Rather than the flat or si
|
|
|
196
227
|
- Ruby-to-magenta gradients (`#ea2261` to `#f96bee`) for hero decorations
|
|
197
228
|
- Brand dark sections use `#1c1e54` backgrounds with white text
|
|
198
229
|
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
**Verified:** 2026-05-08 (omd:migrate Apple-tier — run 3/10)
|
|
233
|
+
**Tier 1 sources:** stripe.com/ (HDS `.hds-button` system, live DOM 2 surfaces); stripe.com/payments (Sessions `.CtaButton` system, second surface — distinct from HDS)
|
|
234
|
+
**Tier 2 sources:** styles.refero.design/style/48e5de76-05d5-4c4e-a269-c7c245b291ec (HDS Primary `#533afd` / 4px confirmed); getdesign.md/stripe — directory only
|
|
235
|
+
**Conflicts resolved:** Two-system split documented as intentional (not a conflict): HDS `#533afd` 4px sharp on marketing/home / Sessions `#9966ff` 16.5px pill 425-weight on product pages. Both retained as separate variant subgroups in §4.
|
|
236
|
+
**Earlier gap:** §4 had only HDS variants; Sessions `#9966ff` system was missing. Now added.
|
|
237
|
+
**Philosophy citations:** Wikipedia (Patrick + John Collison), YC Startup Library, KITRUM (Auctomatic prior exit), Founded.com ($159B valuation).
|
|
238
|
+
**`.verification.md`:** `web/references/stripe/.verification.md`
|
|
239
|
+
|
|
199
240
|
## 5. Layout Principles
|
|
200
241
|
|
|
201
242
|
### Spacing System
|
|
@@ -348,7 +389,9 @@ Stripe's voice is that of a careful engineer who happens to have literary sensib
|
|
|
348
389
|
|
|
349
390
|
## 11. Brand Narrative
|
|
350
391
|
|
|
351
|
-
Stripe was founded in 2010 by Patrick and John Collison — two Irish brothers who kept running into the same problem: accepting payments online was far harder than it should be for any developer who wanted to build something on the internet. The
|
|
392
|
+
Stripe was founded in **2010** by **Patrick Collison (CEO)** and **John Collison (President)** — two Irish brothers from **Limerick** who kept running into the same problem: accepting payments online was far harder than it should be for any developer who wanted to build something on the internet ([Patrick Collison — Wikipedia](https://en.wikipedia.org/wiki/Patrick_Collison), [John Collison — Wikipedia](https://en.wikipedia.org/wiki/John_Collison)). The brothers had prior exit experience: their previous company **Auctomatic** (originally Shuppa, 2007) merged with Oxford grads **Harjeet and Kulveer Taggar** through Y Combinator and was sold to Live Current Media on Good Friday, March 2008 — Patrick was 19, John was 17 ([KITRUM — Collison Brothers](https://kitrum.com/blog/stripe-founders-the-story-of-collison-brothers/)). Stripe entered **Y Combinator's W10 batch** ([YC Startup Library](https://www.ycombinator.com/library/Kx-patrick-john-collison-co-founders-of-stripe)) and raised a 2011 seed round of **$2M including PayPal co-founders Elon Musk and Peter Thiel + Sequoia Capital**. The first customer was YC company 280 North; its founder Ross Boucher later joined Stripe as one of the first employees. As of 2024-2025 Stripe is valued at **~$159B** ([Founded.com](https://www.founded.com/how-two-irish-brothers-built-stripe-the-online-payments-startup-now-worth-159-billion/)).
|
|
393
|
+
|
|
394
|
+
The founding rejection was of every incumbent payment processor that treated integration as a multi-week enterprise-sales procurement cycle. Stripe's first pitch was, essentially: *"what if it took seven lines of code instead."*
|
|
352
395
|
|
|
353
396
|
That developer-first framing shaped everything that came after: the API as the product, the docs as an interface, *"Growing the GDP of the internet"* as a mission statement that reads like an economist wrote it, and the company's obsession with reliability (99.999% uptime as a stated number, not a marketing claim). **Stripe Press** — the company's publishing imprint with the tagline *"Ideas for progress"* — makes the intellectual posture explicit: this is a company that takes ideas seriously enough to commission and print books about maintenance, scientific freedom, and efficiency.
|
|
354
397
|
|
|
@@ -253,3 +253,76 @@ The green accent (`#3ecf8e`) appears selectively — in the Supabase logo, in li
|
|
|
253
253
|
5. Hero line-height of 1.00 is the signature typographic move
|
|
254
254
|
6. Pill (9999px) for primary actions, 6px for secondary, 8-16px for cards
|
|
255
255
|
7. HSL with alpha channels creates the sophisticated translucent layering
|
|
256
|
+
|
|
257
|
+
## 10. Voice & Tone
|
|
258
|
+
|
|
259
|
+
Supabase's voice is **Postgres-pragmatic and OSS-confident.** "The Postgres Development Platform" — capability-driven, dev-first. Strong open-source positioning ("the open source Firebase alternative") with green primary `#3ecf8e` matching Postgres heritage.
|
|
260
|
+
|
|
261
|
+
| Context | Tone |
|
|
262
|
+
|---|---|
|
|
263
|
+
| CTA | Verb. "Start your project", "Get started", "Sign up" |
|
|
264
|
+
| Marketing | Postgres-credibility. Real SQL in marketing copy |
|
|
265
|
+
| Documentation | SQL-first, code-block-heavy |
|
|
266
|
+
| Error | Specific. "Foreign key constraint failed: table X column Y" |
|
|
267
|
+
|
|
268
|
+
**Voice samples**
|
|
269
|
+
- Tagline: *"The Postgres Development Platform"* <!-- verified: supabase.com homepage 2026-05 -->
|
|
270
|
+
|
|
271
|
+
**Forbidden phrases.** "Revolutionary BaaS". Generic Firebase-comparison framing.
|
|
272
|
+
|
|
273
|
+
## 11. Brand Narrative
|
|
274
|
+
|
|
275
|
+
Supabase was founded **2020** by **Paul Copplestone (CEO)** + **Ant Wilson (CTO, joined January 2020)** ([Y Combinator — Supabase](https://www.ycombinator.com/companies/supabase), [Frederick AI — Founder Story Paul Copplestone](https://www.frederick.ai/blog/paul-copplestone-supabase)). **Y Combinator Summer 2020 (S20)** batch — founding coincided with the start of the COVID-19 pandemic; raised **$100K pre-seed from angels** before YC. Open-source Firebase alternative built on **Postgres → Realtime → Auth → Storage**. Funding ladder: **$30M Series A (Sept 2021)** → **$80M Series B (May 2022)** → **$2B valuation (April 2025)** → **$5B valuation October 2025** (Series E, just **4 months after $2B** — one of the fastest valuation jumps in OSS-developer-tooling) ([TechCrunch — Supabase $5B four months after $2B](https://techcrunch.com/2025/10/03/supabase-nabs-5b-valuation-four-months-after-hitting-2b/), [SuperbCrew — Supabase $100M Series E](https://www.superbcrew.com/supabase-raises-100-million-in-series-e-funding-round/)). The brand voice tracks the OSS-engineer positioning: Postgres-credible, open-by-default, never marketing-fluff. Primary green references Postgres elephant heritage with a modern lift — Tier 1 measurement on `/pricing` shows the canonical Primary CTA fill is `rgb(114, 227, 173)` = **`#72e3ad` Supabase Mint Green** (a **lighter shade** than the §2 doc's `#3ecf8e` deeper green, possibly a 2025 brand refresh).
|
|
276
|
+
|
|
277
|
+
## 12. Principles
|
|
278
|
+
|
|
279
|
+
1. **Postgres is the foundation.** *UI implication:* surfaces lead with Postgres-native features.
|
|
280
|
+
2. **Open-source heritage.** *UI implication:* self-host first-class.
|
|
281
|
+
3. **Pill (9999px) primary, 6px secondary, 8-16px cards.** *UI implication:* mixed radius with strict roles.
|
|
282
|
+
4. **HSL with alpha channels.** *UI implication:* translucent layering using alpha, not opacity.
|
|
283
|
+
5. **Green `#3ecf8e` for primary.** *UI implication:* preserve Postgres-heritage green.
|
|
284
|
+
|
|
285
|
+
## 13. Personas
|
|
286
|
+
|
|
287
|
+
*Personas are fictional archetypes informed by Supabase user segments (full-stack developers, indie SaaS founders, AI app builders), not individual people.*
|
|
288
|
+
|
|
289
|
+
**Henrik Sondergaard, 33, Copenhagen.** Full-stack engineer. Supabase + Next.js for client SaaS projects.
|
|
290
|
+
|
|
291
|
+
**Sofia Russo, 28, Milan.** Indie founder shipping micro-SaaS. Supabase Auth + Postgres + Storage in one stack.
|
|
292
|
+
|
|
293
|
+
**Marcus Chen, 35, San Francisco.** AI app builder. Supabase Edge Functions + Vector for RAG infrastructure.
|
|
294
|
+
|
|
295
|
+
## 14. States
|
|
296
|
+
|
|
297
|
+
| State | Treatment |
|
|
298
|
+
|---|---|
|
|
299
|
+
| **Empty (no projects)** | "Start your project" CTA |
|
|
300
|
+
| **Empty (no tables)** | "Create your first table" with SQL editor |
|
|
301
|
+
| **Loading (query)** | Per-row count + execution time |
|
|
302
|
+
| **Loading (function deploy)** | Step-by-step deploy log |
|
|
303
|
+
| **Error (SQL)** | Inline below editor + line:column |
|
|
304
|
+
| **Error (RLS)** | Specific policy + table |
|
|
305
|
+
| **Success (query)** | Result table + execution stats |
|
|
306
|
+
| **Success (deploy)** | Endpoint URL + invocation example |
|
|
307
|
+
| **Skeleton (table list)** | Translucent green-tinted placeholders |
|
|
308
|
+
| **Disabled (free tier)** | Upgrade link |
|
|
309
|
+
| **Loading (long migration)** | Persistent progress |
|
|
310
|
+
|
|
311
|
+
## 15. Motion & Easing
|
|
312
|
+
|
|
313
|
+
| Token | Value | Use |
|
|
314
|
+
|---|---|---|
|
|
315
|
+
| `motion-instant` | 0ms | Selection |
|
|
316
|
+
| `motion-fast` | 150ms | Hover |
|
|
317
|
+
| `motion-standard` | 250ms | Modal, panel |
|
|
318
|
+
|
|
319
|
+
Standard cubic-bezier; no bounce. `prefers-reduced-motion: reduce` removes hover transitions.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
**Verified:** 2026-05-08 (omd:migrate run 56 — Apple-tier)
|
|
324
|
+
**Tier 1 sources:** supabase.com home + /pricing (live DOM via playwright — Primary **`#72e3ad`** Supabase Mint Green + `#171717` Near-Black text 6px / 38-42px / 8×16 / 14-16px·400; Outline `#fdfdfd` Soft White 6px; Banner pill 9999px; nav 6px / 14px·500).
|
|
325
|
+
**Tier 2 sources:** styles.refero.design / getdesign.md — no record.
|
|
326
|
+
**Tier 2 (Philosophy/founders/funding):** YC (S20), LinkedIn (Copplestone), Frederick AI (Copplestone story), TechCrunch (2025-10 $5B "4 months after $2B"), SuperbCrew, Supabase company page.
|
|
327
|
+
**Style ref:** `stripe`.
|
|
328
|
+
**Conflicts unresolved:** Mint Green HEX — §2 doc `#3ecf8e` (darker mid-green) vs live `#72e3ad` (lighter mint) — likely 3-shade palette w/ 2025 brand refresh; both retained, live wins for Primary. **Earlier mistake reverted:** prior footer captured nav-only — canonical Primary is `#72e3ad` Mint Green missed entirely.
|