-
Notifications
You must be signed in to change notification settings - Fork 7
Brand Library 110
data/brands/ holds 110 individual brand DESIGN.md specs as JSON files. Each one is a forensic read of a real-world brand surface — Stripe, Apple, Linear, Anthropic, Pitchfork, Ferrari — captured as queryable structured data the engine pipes into recommendations. None of the top 8 Claude UX skills ship a single brand spec. We ship 110.
This page covers what a brand spec contains, the 7 categories, the 14 brand specimens shown on the homepage, how the recommender uses brand specs, and how to add a new one.
For the broader engine, see Architecture. For how recommendations attach brand exemplars, see Recommender Engine.
Each file is one JSON object at data/brands/<id>.json. Eight fields, all required, no optional fluff.
| Field | Type | What it holds |
|---|---|---|
id |
string | kebab-case identifier (stripe, apple, bmw-m, linear.app). Stable across versions. |
name |
string | Human-readable name (Stripe, Apple, BMW M, Linear). Used in rationale strings. |
category |
string | One of the 7 categories below. Used by recommender filtering and homepage grouping. |
year_observed |
int | When the spec was captured. Brand surfaces evolve; the year is the truth-claim window. |
philosophy |
string | One paragraph on what the brand's design language is actually trying to do. Not marketing copy — a forensic read. |
design_language |
object | Concrete tokens: type (display / body / mono), color_primary, color_canvas, color_ink, color_accent, radius (array), spacing (e.g. "4-based"), motion_signature
|
trademark_signals |
string[] | 4-6 specific, observable, copy-paste-distinguishable things. "Gradient-mesh backdrop on every marketing hero — cream/orange/lavender/indigo/ruby horizontally washed across the upper third." Not "uses gradients." |
components_observed |
string[] | Named components seen across the brand's surface. nav-bar-on-mesh, button-primary-pill, card-feature-light. Used to seed the component lane when this brand is an exemplar. |
exemplar_pages |
string[] | URLs that ground the spec. stripe.com/payments, anthropic.com/research. The reader can verify the claims. |
ai_slop_avoided |
string[] | Explicit don't-do rules derived from the brand's discipline. "Don't bump display weight above 300." "Don't paint the canvas pure white. The putty tint IS the corporate brand differentiator." |
source_md |
string | Pointer to the underlying Markdown source at references/brands/<id>-DESIGN.md. |
This is the schema the engine consumes. It's the schema you'd write if you were briefing a senior designer who had never seen the brand — concrete tokens, the trademark signals nobody else captures, and the don't-do list that's specific to this brand and no other.
{
"id": "anthropic",
"name": "Anthropic",
"category": "AI / ML Platform",
"year_observed": 2026,
"philosophy": "An inspired interpretation of Anthropic's corporate-research brand language — the company surface (anthropic.com) sister to the Claude product, but tuned for research papers, policy posts, and hiring rather than for trying a chat product. The brand reads as a literary technology publisher: warm putty canvas, Tiempos serif at every display tier, narrow editorial column widths, a thin red-clay accent kept almost entirely in reserve.",
"design_language": {
"type": { "display": "Tiempos Headline", "body": "Styrene B", "mono": "JetBrains Mono" },
"color_primary": "#191919",
"color_canvas": "#f0eee6",
"color_ink": "#191919",
"color_accent": "#cc785c",
"radius": [0, 4, 8],
"spacing": "8-based",
"motion_signature": "Almost-no-motion — quiet 200ms ease-out fades on link hovers; research-page entries reveal at a 600ms scroll-fade without translate."
},
"trademark_signals": [
"Warm putty canvas (#f0eee6) across every page — the brand's most-recognized chrome cue, deliberately not Claude's cream and deliberately not OpenAI's white",
"Tiempos Headline serif at all display tiers (weight 400, never bold) with negative letter-spacing — research-paper voice, never SaaS-marketing voice",
"Narrow editorial body column (~640px) and generous line-height 1.6 — the page reads as a long-form essay, not a landing page",
"Red-clay accent (#cc785c) appears only on inline article hyperlinks and the radial-spike Anthropic glyph; never a button fill, never a hero gradient",
"Square or near-square buttons (0px or 4px radius) — refuses the pill geometry every other AI brand uses"
],
"components_observed": [...],
"exemplar_pages": ["anthropic.com", "anthropic.com/research", ...],
"ai_slop_avoided": [
"Don't paint the canvas pure white. The putty tint IS the corporate brand differentiator from Claude (cream) and OpenAI (white)",
"Don't use Tiempos at weight 700. Display weight is locked at 400 — the elegance is the typeface, not the weight",
...
],
"source_md": "references/brands/anthropic-DESIGN.md"
}The hex values are real. The "putty canvas, not pure white" call is the kind of distinction a senior designer would catch and an LLM would otherwise miss.
110 brands split across 7 top-level categories:
| Category | Count | Representative brands |
|---|---|---|
| Developer Tools | 36 | Vercel, Linear, Supabase, Resend, Cursor, Raycast, Framer, Sentry, Datadog, MongoDB, HashiCorp, ClickHouse, Snowflake, Sourcegraph, Webflow, Sanity |
| Consumer / Lifestyle / Retail | 19 | Apple, Airbnb, Allbirds, Nike, Patagonia, Aesop, Glossier, Spotify, Pinterest, Starbucks, Uber, TikTok, Instagram, Shopify, HP, Hims & Hers |
| Fintech / Crypto | 14 | Stripe, Ramp, Mercury, Brex, Monzo, N26, Wise, Revolut, Robinhood, Plaid, Coinbase, Mastercard, Binance, Kraken |
| Editorial / Media | 13 | The Atlantic, The Economist, Bloomberg, The New York Times, Wired, The Wall Street Journal, Dezeen, Pitchfork, Substack, NVIDIA, The Verge, Vodafone, Clay |
| AI / ML Platform | 12 | Anthropic, Claude, OpenAI, Cohere, Mistral AI, Perplexity, ElevenLabs, Together AI, MiniMax, Runway, VoltAgent, xAI |
| Productivity / Collaboration | 8 | Notion, Linear (linear.app product), Figma, Airtable, Miro, Cal.com, Intercom, Zapier |
| Automotive | 8 | Tesla, BMW, BMW M, Ferrari, Lamborghini, Bugatti, Renault, SpaceX |
Counts add to 110. The skew toward Developer Tools (33%) reflects where Claude Code users are actually shipping — most ux-skill installs are inside developer-facing products, not consumer brands.
The categories are coarse on purpose. "Fintech / Crypto" includes Stripe (payments infrastructure), Coinbase (consumer crypto exchange), and Mercury (B2B banking) — three very different brands sharing one constraint: financial trust. The category exists so the recommender can pre-filter by "show me brands in this space," not as a taxonomy lecture.
The marketing site at uxskill.laithjunaidy.com shows 14 brand specimens — a curated subset that spans the design-language range from quiet to loud, editorial to performance. Each specimen card carries the full design language (type, weight, tracking, palette) so a click on it can reskin the homepage in that brand's tokens.
| Brand | Category | Distinctive trait |
|---|---|---|
| Apple | Consumer / Lifestyle | SF Pro Display at weight 600, negative tracking, the quietest dark surface in tech |
| Linear | SaaS / Developer Tools | Inter Tight at weight 700 on the deepest practical black, tabular numerics |
| Vercel | SaaS / Developer Tools | System-mono headlines, ASCII-art aesthetic, zero illustration, ink-on-canvas restraint |
| Stripe | Fintech / Payments | Switzer at weight 500, gradient-mesh backdrop on every hero, single-indigo CTA hierarchy |
| Figma | Design Tools | Plus-Jakarta at weight 600, multi-color logo palette as the brand's only chromatic license |
| Notion | SaaS / Productivity | Bricolage Grotesque at weight 700, illustration-heavy editorial voice |
| Spotify | Consumer / Media | Spotify Mix at weight 700, ultra-dark canvas, brand-green as the only highlight |
| Supabase | SaaS / Developer Tools | Inter at weight 600, emerald-green accent, terminal-flavored hero composition |
| Resend | SaaS / Developer Tools | Instrument Serif italic display, archive-binder aesthetic, editorial restraint on developer surface |
| Anthropic | AI / ML | Tiempos Headline serif at weight 400, warm putty canvas (#f0eee6), red-clay accent in reserve |
| OpenAI | AI / ML | Söhne weight 500, pure white canvas, monochrome with sparse green accents |
| Ferrari | Automotive / Performance | Ferrari Sans Serif at weight 800, red-on-yellow as the only color move that exists in their world |
| Pitchfork | Media / Editorial | Caslon italic display, magazine-stripped-down, score numbers as primary navigation |
| TikTok | Consumer / Media | Helvetica Now at weight 700, brand-cyan + brand-magenta as the chromatic signal, dense vertical-video layout |
The picks span the gap intentionally. Apple is the quietest; Ferrari is the loudest. Anthropic is editorial-restrained; TikTok is consumer-loud. Pitchfork is magazine; Vercel is terminal. A user clicking through the 14 sees the full range of what's queryable in the catalog.
The brands lane (_lane_brands in engine/recommender/core.py) returns five brand exemplars per recommendation:
def _lane_brands(style, industry):
brands = load_brands()
bias = set(industry.get("exemplars", []))
ranked = sorted(brands, key=lambda b: (b.get("id") in bias, b.get("name", "")))
return ranked[:5]The industry profile carries an exemplars list — brand ids that are canonical for that industry. A fintech-neobank industry profile lists stripe, ramp, monzo, mercury, n26 as exemplars; the recommender pushes those to the top of the brand list. Anything outside the industry's exemplar list is alphabetically stable as a secondary sort key.
The LLM consumes the brand exemplars during generation. When the recommendation says "use Stripe as a brand exemplar," the LLM reads data/brands/stripe.json and gets:
- The exact type pair Stripe uses (Söhne weight 300 on display, weight 400 on body).
- The exact palette (deep navy
#0d253dink, electric indigo#533afdprimary, white#ffffffcanvas). - The gradient-mesh recipe (cream/orange/lavender/indigo/ruby horizontally washed).
- The five trademark signals that would make a designer look at the output and say "this person actually studied Stripe."
- The three explicit don'ts: don't bump display above weight 300, don't introduce new accent colors, don't use indigo as body text.
That's the difference between "this looks like a generic SaaS landing" and "this looks like the team actually knows what Stripe does." The brand specs are the moat.
Three files to touch.
Use the schema above. Capture the brand forensically:
{
"id": "my-brand",
"name": "My Brand",
"category": "Developer Tools",
"year_observed": 2026,
"philosophy": "One paragraph on what this brand's surface is actually doing. Not the marketing claim — the design read.",
"design_language": {
"type": { "display": "Geist", "body": "Geist", "mono": "Geist Mono" },
"color_primary": "#0d0d0d",
"color_canvas": "#ffffff",
"color_ink": "#0d0d0d",
"color_accent": "#00d9ff",
"radius": [0, 4, 8, 12],
"spacing": "4-based"
},
"trademark_signals": [
"Specific observable thing 1",
"Specific observable thing 2",
"Specific observable thing 3",
"Specific observable thing 4",
"Specific observable thing 5"
],
"components_observed": ["nav-on-canvas", "hero-monospace-headline", "..."],
"exemplar_pages": ["mybrand.com", "mybrand.com/product"],
"ai_slop_avoided": [
"Don't do X. The Y is the brand differentiator.",
"Don't bump weight above 500. The discipline is the typeface, not the weight."
],
"source_md": "references/brands/my-brand-DESIGN.md"
}The discipline: every trademark_signal should name something you can copy-paste-distinguish from another brand. "Uses dark mode" is not a signal. "Pure black #000000 canvas, never #0d0d0d, with a single off-white text color and zero shadow on any surface" is a signal.
{
"brands": [
...,
{ "id": "my-brand", "name": "My Brand", "category": "Developer Tools" }
]
}The _index.json is the lightweight catalog the marketing site and the recommender read first. Keep it in alphabetical order by id.
The Markdown source the JSON references via source_md. The Markdown is the readable longhand version — a senior designer's notes, with screenshots, hex tables, and the reasoning behind every trademark signal. The JSON is the queryable distillation.
Optional but recommended: open a PR. Brand specs that ship in the catalog are reviewed for forensic accuracy — "you said Söhne weight 300, but Stripe's actual hero uses weight 200 with optical-size variation." Getting the spec right is more important than getting it fast.
The top 8 Claude UX skills on the marketplace ship zero brand specs. They ship style names ("SaaS Clean"), palette lists ("Midnight Blue"), motion presets ("Subtle Fade Up"). What they don't ship is grounded data — "this is what Linear actually does, this is what Stripe actually does, this is what Anthropic actually does, and here are the five things that make each look like themselves."
110 brand specs is the asymmetric move. Building one good brand spec takes about three hours of forensic study, screenshot capture, hex-picking, type-identification, and write-up. 110 specs is 330 hours of taste work compressed into a JSON catalog the LLM can read in one tool call. That's the difference between "this looks generic" and "this looks like the team actually knows."
The catalog is also the layer that makes ux-skill's recommendations specific instead of vague. The recommender doesn't say "use a fintech style." It says "use Stripe-style as the brand exemplar with these five trademark signals and these three don'ts." The LLM has somewhere concrete to anchor.
See also: Architecture · Recommender Engine · All 22 Commands Source: github.com/Laith0003/ux-skill/tree/main/data/brands Index: github.com/Laith0003/ux-skill/blob/main/data/brands/_index.json