// system · v1

Spec

The design system behind this site. One set of tokens drives every page, the generated share images and a tokens.json that AI agents can read.

01

Principles

01

Frame what matters

Crop marks point at the one thing worth your attention. If everything is framed, nothing is.

02

One signal

Orange is reserved for crop marks, focus and the main path. Everything else is paper and ink.

03

Tokens, not values

Components use semantic names and themes change the values. The same tokens are published as JSON for people and AI agents.

02

An A inside crop marks: a component framed on a spec sheet. Two drawings share one shape, a master for 32px and up and a heavier one for small sizes.

light
dark
96px
48px
32px
24px · small
16px · small
  • The A takes the text color; the crop marks are always signal.
  • Keep clear space of one crop-mark length on every side.
  • At 24px and below, use the small drawing (the Mark component switches automatically).
  • Never go below 16px, recolor the crop marks or rotate the mark.
import { Mark, Wordmark } from '@/app/components/brand/logo';

<Mark size={26} />          // picks the small drawing at 24px and below
<Wordmark />                // mark + "alex andrade"
03

Color

Paper and ink with one signal color. Every value is a semantic token; light and dark change the value, never the name. Contrast is checked against WCAG on every build of this page.

  • --backgroundPage ground#f4f4f0 · #111111
    no text use
  • --surfaceRaised areas: inline code, image wells#ffffff · #1c1c1a
    no text use
  • --foregroundPrimary text, rules and outlines#111111 · #f4f4f0
    light 17.1:1 ≥ 4.5dark 17.1:1 ≥ 4.5on --background
  • --mutedSecondary text and metadata#555550 · #a1a19a
    light 6.8:1 ≥ 4.5dark 7.3:1 ≥ 4.5on --background
  • --lineHairlines and dividers#d9d9d2 · #2e2e2b
    no text use
  • --signalCrop marks, focus rings and fills. Never small text.#f04e17 · #ff6a33
    light 3.3:1 ≥ 3dark 6.6:1 ≥ 3on --background
  • --signal-textAccent text and links#c2410c · #ff6a33
    light 4.7:1 ≥ 4.5dark 6.6:1 ≥ 4.5on --background
  • --primaryPrimary button fill#111111 · #ff6a33
    no text use
  • --on-primaryText on primary#f4f4f0 · #111111
    light 17.1:1 ≥ 4.5dark 6.6:1 ≥ 4.5on --primary
  • --code-bgCode blocks#111111 · #0a0a0a
    no text use
// Tailwind utilities map to the tokens
<p className="text-muted">…</p>
<div className="border-line bg-surface">…</div>

/* or the CSS variables directly */
outline: 2px solid var(--signal);
04

Typography

Space Grotesk

Headings and body copy

font-sans

JetBrains Mono

Labels, metadata, tags and code

font-mono

  • Display72px · 1.02 · -0.035em · boldHero and page titles

    Design systems that humans and AI agents get right.

  • Heading48px · 1 · -0.025em · boldSection headings

    Design systems that humans and AI agents get right.

  • Title36px · 1.25 · -0.025em · boldFeatures, cards and article titles in lists

    Design systems that humans and AI agents get right.

  • Lead20px · 1.625 · regular · mutedIntros under a title

    Design systems that humans and AI agents get right.

  • Body17px · 32px · regularLong-form reading

    Design systems that humans and AI agents get right.

  • LabelMono · 13px · regularEyebrows, dates and navigation

    Design systems that humans and AI agents get right.

  • TagMono · 12px · regular · mutedTags, captions and fine print

    Design systems that humans and AI agents get right.

05

Crop marks

The signature element. Crop marks frame the one thing that matters in a view: the portrait, the featured post, the share image title. Size them with two variables.

12 / 2
small
14 / 2
default
28 / 3
large
<div className="crop-marks p-4">…</div>

<div className="crop-marks p-4 [--crop-len:28px] [--crop-w:3px]">…</div>
06

Components

<ButtonLink>

Every call to action. Primary for the one main path in a view, secondary next to it, text for inline links.

<ButtonLink href="/blog">Read the latest</ButtonLink>
<ButtonLink href="/#work" variant="secondary">See the work</ButtonLink>
<ButtonLink href={url} variant="text" external>Explore Sous Chef</ButtonLink>

<Eyebrow>

The mono comment above a title. Lowercase, short, never a sentence.

// design-systems · ai · frontend

<Eyebrow>design-systems · ai · frontend</Eyebrow>

<SectionHeading>

Numbered section title with a full-width rule. Numbers follow page order.

01

Writing

<SectionHeading index="01" title="Writing" />

<PostTags>

Up to three tags, slugged and prefixed with #.

  • #design-systems
  • #ai
  • #mcp
<PostTags tags={['Design Systems', 'AI', 'MCP']} />
07

Voice

  • alex andradeThe wordmark is always lowercase.
  • // writingMono comments label sections and metadata.
  • 01 · 02 · 03Numbers give sections an order, like a spec.
  • I built, we learnedFirst person, plain words, no hype.
08

Resources