v0.1 — Starting from the Cal.com base

The Stelo
design system.

A clean, friendly modern-SaaS interface — white canvas, near-black primary action, light-gray cards holding real product UI fragments. Tweak it, expand it, make it Stelo's.

tokens.preview
Aa Bb Cc
Inter / weight 600 / -0.04em
The body copy stays in Inter at 400. Letter-spacing returns to 0.

A confident, near-monochrome SaaS surface.

Stelo's marketing surface is white canvas with a near-black primary action. The system reads as confidently engineered without trying to impress — every band has clear hierarchy, generous whitespace, and a single primary action.

Canvas + ink

White surface, near-black voice.

The page floor stays white. The primary action stays #111111. The brand reads as engineered, not decorated.

Type system

Cal Sans display, Inter body.

Display headlines use a custom geometric face with negative letter-spacing. Body, buttons, nav stay in Inter.

Card surfaces

Light gray for claims, white for product.

Light-gray cards (#f5f5f5) hold abstract feature claims. White cards with chrome hold real product fragments.

Closing surface

A dark footer closes every page.

The dark navy footer (#101010) is the only dark surface in the system. The light-to-dark transition is the editorial rhythm.

A near-monochrome palette with restrained accents.

Black ink for action and headlines. Gray surfaces for cards. A small pastel set for badges. Brand accent and semantic colors stay rare and intentional.

Brand & Accent
Primary
colors.primary
#111111
Primary Active
colors.primary-active
#242424
Brand Accent
colors.brand-accent
#3b82f6
Badge Orange
colors.badge-orange
#fb923c
Badge Pink
colors.badge-pink
#ec4899
Badge Violet
colors.badge-violet
#8b5cf6
Badge Emerald
colors.badge-emerald
#34d399
Surface
Canvas
colors.canvas
#ffffff
Surface Soft
colors.surface-soft
#f8f9fa
Surface Card
colors.surface-card
#f5f5f5
Surface Strong
colors.surface-strong
#e5e7eb
Surface Dark
colors.surface-dark
#101010
Surface Dark Elevated
colors.surface-dark-elevated
#1a1a1a
Hairline
colors.hairline
#e5e7eb
Hairline Soft
colors.hairline-soft
#f3f4f6
Text
Ink
colors.ink
#111111
Body
colors.body
#374151
Muted
colors.muted
#6b7280
Muted Soft
colors.muted-soft
#898989
On Primary / On Dark
colors.on-primary
#ffffff
On Dark Soft
colors.on-dark-soft
#a1a1aa
Semantic
Success
colors.success
#10b981
Warning
colors.warning
#f59e0b
Error
colors.error
#ef4444

Cal Sans for display, Inter for everything.

Display sizes use weight 600 with negative letter-spacing (-0.5 to -2px). Body, UI, and captions stay in Inter. The boundary is strict — never blur the trinity.

display-xltypography.display-xl
The better way to schedule meetings
64pxw600-2px
display-lgtypography.display-lg
Your all-purpose scheduling app
48pxw600-1.5px
display-mdtypography.display-md
Sub-section headlines and card titles
36pxw600-1px
display-smtypography.display-sm
CTA-band heads and pricing
28pxw600-0.5px
title-lgtypography.title-lg
Pricing plan name — Inter weight 600
22pxw600-0.3px
title-mdtypography.title-md
Feature card title at 18 / 600
18pxw6000
title-smtypography.title-sm
Small card title and list label
16pxw6000
body-mdtypography.body-md
Default running-text. The body voice stays neutral and quiet — the page does the talking through structure, not voice.
16pxw4000
body-smtypography.body-sm
Footer body text and fine-print at 14 / 400.
14pxw4000
captiontypography.caption
BADGE LABELS AND CAPTIONS — 13 / 500
13pxw5000
codetypography.code
const config = { theme: 'stelo' }
14pxw400JetBrains Mono

A 4px base, 96px between bands.

Eight spacing tokens on a 4px base. Section padding stays at 96px — modern-SaaS standard, calibrated for fast scanning.

spacing.xxs
4px
spacing.xs
8px
spacing.sm
12px
spacing.md
16px
spacing.lg
24px
spacing.xl
32px
spacing.xxl
48px
spacing.section
96px

Soft shadows and a hierarchical radius scale.

Elevation is small and modern — never neumorphism, never glass. Color-block contrast does heavy lifting. Radius climbs in eight clear steps.

Elevation Levels
Flat
no shadow, no border
Hairline
1px hairline border
Card surface
surface-card bg
Soft drop
0 1px 2px rgba
Elevated
0 4px 12px rgba
Border Radius Scale
rounded.xs
4px
rounded.sm
6px
rounded.md
8px
rounded.lg
12px
rounded.xl
16px
rounded.pill
9999px
rounded.full
50%

Buttons, cards, badges, and product chrome.

Component instances rendered live below. Each card shows the YAML key and the rendered piece — the system as it actually behaves.

button-primary button-secondary · button-text · button-icon
nav-pill-group the signature pill-in-pill
text-input default + focused border
badge-pill + pastel variants
Default Product New Customer story Live
avatar-circle 36px circular, optional pastel fill
AC
JM
RD
KP
+9
feature-card 32px padding, light-gray surface

Scheduling that works.

Send a single link. Let people pick the time. Stelo handles the rest.

testimonial-card avatar + quote, surface-card bg
★ ★ ★ ★ ★
JD
Jane Doe
Head of Design, Acme

"Stelo cut our scheduling thrash to nothing. Cleanest booking flow we've ever shipped."

hero-app-mockup-card rounded.xl + elevated shadow
Pick a time
30 min · Stelo
M
T
W
T
F
S
S
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
9:00
9:30
10:00
10:30
Pricing tiers — pricing-tier-card · pricing-tier-card-featured
Free
$0/mo
  • 1 user
  • Unlimited bookings
  • Calendar sync
Starter
$12/mo
  • Custom branding
  • Workflows
  • Integrations
Enterprise
Custom
  • SSO / SAML
  • SLA
  • Dedicated CSM
CTA band — cta-band-light

Smarter, simpler scheduling.

Free to start. No credit card required.

Get Stelo free

The boundary that holds the system together.

The rules here are tight on purpose. Cross them and the brand drifts toward generic SaaS.

Do

  • Reserve colors.primary (#111111) for primary CTAs and h1/h2 type. Stelo's button is near-black, not blue.
  • Use Cal Sans for every display headline. Pair with Inter body. Never blur the boundary.
  • Apply negative letter-spacing on display sizes (-0.5 to -2px). Cal Sans without it reads as off-brand.
  • Use light-gray feature cards for abstract claims, white product-mockup cards when showing real chrome.
  • Embed real product UI fragments inside marketing cards instead of painting illustrations of the product.
  • Keep avatars at 36px, perfect circles. Pastel fills only here — nowhere else.
  • End every page with the dark footer. The light-to-dark transition is part of the rhythm.

Don't

  • Don't put accent colors or badge pastels on primary CTAs. The action layer is monochrome.
  • Don't bold display weight beyond 600. Cal Sans at 700 reads as bombastic.
  • Don't use radius beyond rounded.xl (16px) on cards. Bigger reads as consumer-app, not booking software.
  • Don't put dark surfaces anywhere except the footer and the featured pricing tier.
  • Don't repeat the same surface in two consecutive bands. Pacing is white → gray → white → product → white → dark.
  • Don't add hover styling beyond what the system encodes — primary darkens on press; nothing else changes.

Four breakpoints. Columns reduce, cards don't shrink.

Grids collapse from 4 → 2 → 1 columns. Feature cards keep their internal padding at every size. The dark footer stays distinct everywhere.

Name Width Key changes
Mobile < 768px Hamburger nav · h1 64→32px · hero stacks · feature/pricing 1-up · footer 4 cols → 1
Tablet 768–1024px Top nav tightens · pill-group wraps · features 2-up · pricing 2-up
Desktop 1024–1440px Full nav · features 3-up · pricing 4-up
Wide > 1440px Same as desktop with more outer breathing room · max content width caps at 1200px

How to evolve this system without breaking it.

  1. Focus on ONE component at a time. Reference its YAML key directly (component.feature-card).
  2. Variants of an existing component (-active, -disabled, -focused) live as separate entries in components:.
  3. Use {token.refs} everywhere — never inline hex.
  4. Never document hover. Default and Active/Pressed states only.
  5. Display headlines stay Cal Sans 600 with negative letter-spacing. Body stays Inter 400. The trinity does not blur.
  6. The dark footer is the only dark surface on most pages. Don't add other dark cards casually.
  7. When in doubt about emphasis: bigger Cal Sans before bolder Cal Sans.

What this document doesn't cover yet.

A working list of the places where the spec is thin. Tweak from here as the product matures.