Baseline Labs
Design Language v1.0
Warm, measured, zero-dependency

A design system for tools that deal with structured data and AI visibility. Professional without being corporate. Considered without being cold. Every decision below is intentional — no gradients for the sake of it, no decoration without purpose.

01
Warm, not corporate
Anthropic-inspired warm neutrals and earthy accents. Off-white backgrounds (#faf8f5) instead of clinical white. Terracotta as primary accent. The palette should feel like a well-lit studio, not a SaaS dashboard.
02
Block colour, honest surfaces
Flat fills over gradients. If a loading bar is 72% full, that's a solid block of terracotta — not a gradient pretending to be three-dimensional. Surfaces use elevation (sunken → base → raised) not decoration.
03
Three typographic voices
DM Serif Display for editorial warmth in headings. DM Sans for clean, readable body copy. JetBrains Mono for data, code, and anything that needs to align. Never mix roles.
04
Calm, purposeful motion
Animation exists to communicate state, not to entertain. Button presses scale to 0.97. Theme changes take 400ms. Toasts slide in from the right. Typing dots bounce gently. The ease-out curve (0.16, 1, 0.3, 1) gives everything a natural deceleration.
05
Colour carries meaning
Four semantic colours, each with a job. Terracotta (#c8553a) for primary actions and errors. Blue (#5a8fb4) for information and links. Green (#6b8f5c) for success and validation. Saffron (#e09430) for warnings and attention. Never decorative.
06
Data first, chrome second
Charts communicate one insight. Tables use mono for scannable numbers. Position badges highlight top performers. The interface gets out of the way — borders are subtle, hover states are gentle, and whitespace does the heavy lifting.
07
Progressive disclosure
Show what matters, reveal on demand. Dropdowns expand with max-height transitions and spinning chevrons. Filter panels toggle open. Notifications dismiss themselves. The chatbot streams tool usage as it happens.
08
Zero external dependencies
Every chart is hand-built SVG. Every animation is CSS. Icons are Phosphor via webfont. No Chart.js, no D3, no React — just HTML, CSS, and vanilla JS. The entire system works offline, loads instantly, and has no supply chain.
Typefaces DM Serif Display · DM Sans · JetBrains Mono Scale Major third (1.25×) — 11px · 13px · 16px · 18px · 20px · 25px · 31px · 39px Grid 8px base — sp-1 (4) · sp-2 (8) · sp-3 (12) · sp-4 (16) · sp-5 (24) · sp-6 (32) · sp-8 (48) · sp-9 (64) Palette Off-white Charcoal Terracotta Blue Green Saffron Icons Phosphor — regular weight default, fill for emphasis, bold for small inline indicators Radii 4px (sm) · 8px (md) · 12px (lg) · 16px (xl) · pill — soft, never bubbly Motion ease-out (0.16, 1, 0.3, 1) · 120ms fast · 200ms normal · 400ms slow — always decelerate Dark mode Full token inversion via [data-theme="dark"]. Never pure black — #141413 base. Shadows increase opacity. Logo crossfades to warm variant. Accents stay constant, only surfaces and text invert. Dark surfaces Sunken #0e0e0d Base #141413 Raised #1e1d1b Hover #2a2926 Border #2e2d2a Dark text Primary #f0ede6 Secondary #a09c92 Tertiary #706c63 — accent-soft tokens increase to 0.12 opacity Elevation Three layers: sunken (#f2efe9) → base (#faf8f5) → raised (#ffffff). Inset shadow for recessed tracks. Buttons scale(0.97) on :active. Primary fills accent. Secondary outlines. Ghost disappears. All three respond to press.
Warm neutrals, purposeful accents

An earthy, Anthropic-informed palette that feels approachable without leaning startup. Warm off-whites and deep charcoals ground everything, with terracotta as the primary accent.

Background
#faf8f5
Raised
#ffffff
Sunken
#f2efe9
Text
#1a1916
Secondary
#6b6860
Accent
#c8553a
Blue
#5a8fb4
Green
#6b8f5c
Saffron
#e09430
Three voices, one hierarchy

DM Serif Display for editorial warmth, DM Sans for clean body copy, JetBrains Mono for data and code. A major-third scale (1.25) keeps things measured.

3xl · 39px Schema visibility
2xl · 31px Structured data layer
xl · 25px Pipeline architecture
lg · 20px Inference endpoints
base · 16px Body text for longer passages. Clean and readable at any width, with generous line-height.
sm · 13px Captions, labels, and supporting metadata
mono schema.baselinelabs.ai/org/page
8px base grid

Everything aligns to an 8-point grid. Consistent vertical and horizontal rhythm creates a sense of calm and order without visible rigidity.

sp-14px
sp-28px
sp-312px
sp-416px
sp-524px
sp-632px
sp-740px
sp-848px
sp-964px
Phosphor — six weights

Phosphor gives us a single icon rendered across thin, light, regular, bold, fill, and duotone. One icon family for every context.

Light
Regular
Bold
Fill
Duotone
house
gear
chart-line
search
bell
user
folder
lightning
code
database
globe
checks
shield
arrow-r
download
plus
Soft, not bubbly
4px · sm
8px · md
12px · lg
16px · xl
pill
Three layers of depth
sm
md
lg
inset
Patient feedback

Every loading state should feel calm and intentional. Determinate bars for known progress, skeletons for content, spinners for quick actions.

Schema generation
72%
Processing — 5,184 of 7,200 pages
Deploying to R2
45%
Uploading — 2.3 MB of 5.1 MB
Validation complete
100%
Done — 8,291 schemas validated in 14.2s
Model inference
Waiting for GPU…
Content skeleton
Generating schema…
Training model…
Worker online
Building blocks
Buttons
Tags & badges
Active Deployed v4.0 Training Draft
Input
Toggles
Toasts
Schema deployed to production
Validation failed: missing @type
Worker cold start: ~3s expected
Stat cards
Pages indexed
12,847
+14.2% this week
Schemas generated
8,291
+9.8% this week
Avg latency
1.4s
-220ms vs last week
Validation rate
96.3%
+1.2% this week
Surface hierarchy
Model training

Qwen3-VL fine-tuned with QLoRA on validated schema examples. Training runs on A100 pods via RunPod.

Edge delivery

Cloudflare Workers detect bot traffic and inject schema from the canonical R2 layer — no JavaScript required.

Validation

Every generated schema is validated against schema.org specs before deployment. Invalid output is caught and retried.

Data, not decoration

Charts should communicate a single insight immediately. Restrained colour, generous whitespace, and typography that supports the data rather than competing with it.

Schemas by source
Last 7 days
8,291
+9.8%
Mon
Tue
Wed
Thu
Fri
Sat
Sun
Avg latency
Inference pipeline · ms
1.4s
−220ms
Mar 25 Mar 28 Apr 1
Schema types
Distribution by @type
Article 38%
Product 28%
Organization 20%
Other 14%
Crawl coverage
Pages discovered vs indexed
12.8k
Discovered
W1 W3 W5 W8
Discovered
Indexed
Requests by region
Cloudflare Worker · last 24h
EU-West
3.4k
US-East
2.8k
US-West
2.0k
AP-SE
1.2k
AP-NE
890
EU-Cntrl
680
Validation outcomes
Last 1,000 schemas
Valid 847
Warnings 112
Errors 41
Say what matters, then get out of the way

Notifications use colour and iconography to signal severity at a glance. The text explains what happened and what to do next. Dismissable by default.

Inline banners
Model V5 is training
Qwen3-VL-4B QLoRA fine-tune started on RunPod A100. Estimated completion in 2h 40m.
Deployment successful
Schema endpoint updated on 3 Cloudflare Workers. All health checks passing.
Spot instance preemption
A5000 instance gpu-0a3f may be reclaimed within 15 minutes. Consider checkpointing.
Validation failure
12 schemas rejected — missing required @type property. Batch paused.
Activity feed
Notifications 3
Schema batch #847 deployed to production
2 minutes ago
GPU memory utilisation at 94% on inference pod
18 minutes ago
V4 model evaluation complete — 96.3% validation rate
1 hour ago
Worker schema-inject-v2 restarted
3 hours ago
R2 canonical layer synced — 12,847 records
Yesterday
Toast popups

Slide in from the right, auto-dismiss after 5 seconds. Stack when multiple are active. Try them:

Scannable rows, readable data

Tables use mono for numbers and metrics, hover states for row focus, and subtle borders that don't compete with the data. Position badges highlight top performers.

Query Performance
Position: Top 3 Top 10 10+ Trend: Rising Falling
Query Searches Position Trend Updated
AI-powered GEO optimization 156 #3 +2 2 hours ago
Business visibility tracking 134 #7 −1 4 hours ago
Local SEO analysis tools 98 #5 +3 6 hours ago
Geographic search optimization 87 #12 +5 8 hours ago
Schema markup generation 212 #2 +1 1 hour ago
Structured data best practices 64 #18 −3 12 hours ago
Progressive disclosure

Expandable sections keep interfaces clean. The chevron rotation gives immediate feedback about state. Content animates smoothly with max-height transitions.

Conversational interface

The site chatbot uses asymmetric bubble styling, tool usage cards with distinct icons, and a typing indicator. Hit replay to watch the conversation unfold.

Baseline Assistant
Online
The vocabulary of movement

Every transition in the system uses one of these named patterns. They combine a direction, an easing curve, and a duration tier. Click each to see it play.

fadeIn
slideUp
slideRight
slideLeft
scaleIn
Modal · overlay + scaleIn
Animation reference
PatternKeyframeDurationEasingUse for
Fade infadeIn200–400msease-outOverlays, image reveals
Slide upslideInUp300–500msease-outSections, cards, modals
Slide rightslideInRight400msease-outToasts, side panels
Slide leftslideInLeft400msease-outNavigation, drawers
Scale inscaleIn300msease-outModals, popups, tooltips
StaggerfadeUp500msease-outPage load, list items (+50ms per child)
PressinstantButtons, chips (:active → scale 0.97)
Expandmax-height350msease-outDropdowns, accordions
Spinrotate(180°)300msease-outChevrons, disclosure arrows
Product vs editorial

Two typographic registers for two contexts. The product UI uses Plus Jakarta Sans for its tighter, more contemporary feel. Blog posts, docs, and marketing use DM Sans and DM Serif Display for editorial warmth.

Product UI
Dashboard heading
Section title
Body text for the product interface. Plus Jakarta Sans at -0.02em letter-spacing gives a tight, modern feel used by Vercel, Loom, and Linear.
ff-product · Plus Jakarta Sans
Blog / Docs / Marketing
Article heading
Section title
Body text for editorial content. DM Serif Display for headings, DM Sans for body. Wider letter-spacing, more generous line-height for longer reading.
ff-serif + ff-sans · DM Serif Display + DM Sans

Baseline Labs — Design Language v1.0 April 2026