LangWatch design system
A working reference for the look and feel of the LangWatch site. Hero-to-logos is canon — everything documented here is shipping in src/components/variants/VariantHero.tsx and src/components/CustomerLogos.tsx today. Sections below the customer logos are not in scope yet (they are still being worked out in code and shouldn't be normalized prematurely).
The design system is two-faced on purpose:
- Humans browse the rendered page at
/design-system— swatches, live patterns, prose explanations. - AI / LLMs read these markdown files directly. Every file starts with frontmatter (status, code references, token list) so a model can answer "what is canon?" without parsing prose.
The CSS variables in src/index.css @theme are the only source of truth for tokens. This documentation describes how to use them, why they exist, and where they show up. If the docs and @theme disagree, the CSS wins.
Identity in one line
Calm surface, live machinery underneath.
A serious engineering tool presented the way a premium consumer product would be: mostly white space, quiet ink text, one living gradient, and a real working simulation of the product as the centerpiece (not a screenshot). The page feels still and confident; the proof of capability is alive.
The three references
- Anthropic — warm paper white, charcoal ink, restraint, text-first surfaces. The Claude demo windows quote Anthropic's own aesthetic (terminal black with clay orange, Cowork paper with serif narration) with near-pixel fidelity.
- Apple — obsession with physical detail. The nav is real refractive glass (an actual displacement map, not a blur), and its text and logo invert per-pixel as they pass over dark content. If a material can't be simulated properly, it isn't used at all.
- Editorial serif over mesh (the Orchid-style treatment) — a large, quiet serif statement, left-aligned, floating over a slowly drifting mesh gradient that fades into the page.
Personality words: precise, warm, alive, understated. Playful only in hidden corners.
What's documented here
- Principles — the 10 rules that explain every decision, each with WHY and WHEN-TO-BREAK.
- Tokens — foundations consumed by every pattern.
- Patterns (hero → logos, canonical):
The hero
The site ships a single hero (VariantHero, the Orchid treatment): the announcement pill, heading copy, subhead, CTAs, and customer logos over a pink mesh with protectSide="left" and fadeBottom. Earlier comparison variants were collapsed away; this is now the canonical and only hero. A blue mesh accent (#91b2f2) is kept as a side-by-side comparison option for the mesh hue only.
The patterns in this document describe that hero.
Reading the frontmatter
Every doc in this folder starts with a YAML block. Keys you'll see:
status—canonical(shipping and decided),provisional(in flux), ordebt(known wrong, seetokens-*orKnown debtsections).code—path:linesreferences where this pattern lives. Treat these as authoritative; the prose is commentary.tokens-used— which@themetokens this pattern depends on. Useful for "if I change this token, what breaks?"related— sibling docs worth reading together.
If you're an AI assistant editing this codebase: read the frontmatter to find the live code, read the live code, then come back to the prose only for the why. Don't trust prose over code.
Out of scope (deliberately)
- Sections below the customer logos (
SectionWhy,SectionLangy,SectionScenario,SectionPillars,SectionGovernance,SectionGateway,SectionBasics,SectionEnterprise,SectionCustomers,SectionCTA). These are still being designed; documenting them now would freeze decisions that aren't made yet. - Storybook stories (already partially set up via
*.stories.tsx). This design system complements Storybook — patterns link to their stories where they exist, but stories are not duplicated here. - Email, marketing assets, social cards. Out of scope; this is the website design system.
Known debt
The brief committed alongside this hero recorded these known gaps. They are not fixed in this revision (intentionally — we are documenting reality, not aspiration). See the per-token "Known debt" sections for detail.
--font-sanslists Inter first; Inter is not loaded. The body currently renders in the system stack. Geist Variable is bundled but not in the token. See tokens/type.md.--font-monolists JetBrains Mono (not loaded), falls back to system mono. See tokens/type.md.- The announcement teal (
rgba(20,184,166,0.13)+rgb(15,118,110)) and the subhead ink-blue (#39445c) are hardcoded inVariantHero.tsx. They should be tokens. See tokens/color.md and patterns/announcement-pill.md. - The Claude demo palette (terminal
#15130f+ clay#d97757, Cowork paper#faf9f5) is hardcoded insideAgentWorkspace.tsx. Reserved namespace, not site UI tokens. See patterns/agent-workspace.md. - Per-logo optical sizing (
h+mt) is currently inline inCustomerLogos.tsx. Documented as a pattern at patterns/customer-logos.md, not yet abstracted.





