
Brand book
Design System
April, 2026
Authors: Me, Codex and Claude
A brand book covering logo, color, typography, layout, iconography, and application — the source of truth for every interface decision on this site.
Designed by AI agents — Codex and Claude wrote the Next.js, ChatGPT generated the imagery, and QuiverAI built the vector marks. An agent-authored system, documented inside the product it powers.

Brand book
April, 2026
Authors: Me, Codex and Claude
01
The portrait mark and the FC monogram. Where they live, how they scale, and the palette expressions that extend them.
Brand · Logo
A hand-drawn portrait in clean line-art — head, shoulders, hoodie. Doubles as an avatar and a logo: a signature on writing, a founder's mark on projects, and a face beside the name in the nav.
Light · Large





Dark · Large





Brand · Monogram
Where the portrait is too detailed — favicons, single-colour surfaces, letterpress — the FC monogram takes over. A neutral charcoal chip with a mono 'FC' lockup, built to hold its weight at 16 px.
Light surface
Dark surface
Brand · Logo
Twenty-eight approved tints. Use the base portrait by default; reach for a palette variant only when the surface needs a warmer or cooler mood.
Saturated
Earth
Pastel
Neon
02
Pure black, pure white, and the semantic signals that carry weight. Chromatic restraint by default — every hue has to earn its place.
Color · Light mode
#fff ground, #000 ink. Zero chroma — pure greyscale. Depth from borders at 12% black.
Color · Dark mode
#000 ground, #fff ink. Depth from translucent white borders at 14% and stepped neutral greys.
Color · Semantic
Chromatic signals are rare and load-bearing. Success green marks a live project. Destructive red is reserved for error states. Shimmer gradients mark "in flight" content — nothing is decorative.
In the wild
Dot pulses green while a project is live. Translation banners and audio narration use shimmer.
Shimmer · base · purple · red · blue
4s sweep · prefers-reduced-motion
Color · Accessibility
Primary · light
The quick brown fox jumps over the lazy dog.
21.0 : 1Primary · dark
The quick brown fox jumps over the lazy dog.
21.0 : 1Muted · light
The quick brown fox jumps over the lazy dog.
4.74 : 103
Five cuts, five jobs. Display headlines, body serifs, UI sans, and a mono companion — each with a voice the others cannot borrow.
Headline · --font-dm-serif-display
High-contrast display serif · Google Fonts · 400 · Roman + Italic
Reserved for moments that need to sing — section openers, cover titles, the one word that has to land.
Weights in use
Letterforms
Character set
Serif · --font-lora
Contemporary serif · Google Fonts · 400 · 500 · 600 · 700 · Roman + Italic
Long-form reading deserves a serif that can carry rhythm without losing its footing on screen.
Weights in use
Letterforms
Character set
Sans · --font-sans
Neo-grotesque sans · Vercel · variable 100–900 · in use 400 · 500
A marketer who builds — production software, not just strategy decks. When a tool doesn't exist, I build it.
Weights in use
Letterforms
Character set
Display · --font-display
Transitional serif · Google Fonts · 400 · 500 · 600 · Roman + Italic
The best interfaces feel inevitable — like they were discovered, not drawn.
Weights in use
Letterforms
Character set
Mono · --font-mono
Monospaced companion to Geist · 400 · 500 · set at 0.875em inline
$ pnpm dev
> ftchvs_26 dev
> next dev --turbopack
▲ Next.js 16.0.1 ✓ Ready in 1.2s
Weights in use
Letterforms
Character set
Typography · Scale
Four steps, one voice. Display serif for headlines, Geist for running copy, Geist Mono for meta and code. Every size snaps to the 8-point rhythm.
H1 · Display
Lorem ipsum dolor sit
7cqh · CormorantH2 · Section
Lorem ipsum dolor sit amet
5cqh · CormorantBody · Geist
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.
2.4cqh · 1.7 lhMeta · Geist Mono
BRAND · TYPOGRAPHY · SCALE
1.4cqh · uppercaseTypography · Summary
Five cuts, five jobs. Pick by role, not by taste — the family is built so that reaching for the right voice is the default.
Family
Role
Weights
Use for
--font-dm-serif-display--font-lora--font-preview-sans--font-cormorant--font-preview-mono04
An editorial column, an 8-point rhythm, and a grid that collapses gracefully from desktop to phone. The frame is always the point.
Layout · Intent
This site reads like a magazine column — 896px (56rem) at its widest, centred with calibrated side margins. Reach never wins against reading. The grid earns its keep by staying out of the way.
--content-narrow · 56rem--content-wide · 80rem · archive pagesReading column · 896px
A narrow column forces clarity. You can't hide behind width.
Layout · Spacing
Eight is the metronome. Every padding, gap, and margin snaps to a multiple of 8 — with 4 reserved only for hairline alignment nudges. Predictability is the point.
Layout · Anatomy
Three parts build every page. Margins frame the reading field. Columns hold the content. Gutters breathe between columns so the eye never collides with neighbours.
Layout · Viewports
Three viewports, three grid densities. Eight columns on desktop, six on tablet, four on mobile. Margins tighten with the canvas, gutters stay proportional.
Desktop · 1280
8 col · 64 margin · 24 gutter
Tablet · 768
6 col · 32 margin · 20 gutter
Mobile · 390
4 col · 16 margin · 16 gutter
Layout · Breakpoints
Five breakpoints. The grid collapses from 8 to 6 to 4. Margins tighten as the canvas narrows. Content max-width clamps at --content-narrow · 896px.
full editorial
narrows margin
grid drops to 6
single-handed
iPhone baseline
05
A tight Radix set at 15×15, pressed into service sparingly. Tiny labels replace decorative emoji. A green dot carries every live signal.
Iconography · Style
Radix Icons · 15 × 15 baseline · 16–24px
Iconography · Usage
01 · Live project
w-2 h-2 rounded-full bg-green-500 animate-pulse02 · Label badges
03 · Editorial punctuation
Middle dot
LinkedIn · GitHub · Substack
Em-dash
Body copy — like this
Arrow suffix
View all →
Braille divider
⠀⠁⠈⠘⠰⠠⠄⠆
Tiny marks, not decorative — every one earns its keep.
06
The system in place — nav, lists, shimmer, and the favicon. Where every earlier slide earns its keep.
Application · Nav
Three-zone grid — brand left, menu centered on the page axis, utilities right. Collapses to logo + menu button at mobile.
Application · Selected work
Tabular, scannable, dense. Year · Project · Role · Status. Reads like a filmography — the whole practice visible at a glance.
2025
Earlier
Homepage · /projects · dense · scannable
Application · Translated
Shown above MDX posts on non-English locales. A red shimmer sweep, dismissible. The only chromatic signal on a reading page.
Disclaimer: This content was automatically translated.
Notas do ateliê
Há algo particular em fazer uma coisa sem pressa — em deixar que a forma encontre o seu próprio ritmo, sem forçar uma data de entrega que não ajuda ninguém.
shimmer-text-red · 4s sweep · prefers-reduced-motion · dismissible
Application · Writing
Body lives in a 42rem reading column — roughly 65 characters per line. DM Serif sets the title, Lora carries the prose, Geist Mono holds the meta.
Writing · essays
There is a particular kind of shipping — the kind you do because the calendar says to — that never once asks whether the thing is ready. It ships because the slot is open, because the dashboard has a hole.
“The patience tax is what you pay to skip the thinking. Every shortcut is a loan against the next release.”
The alternative is slower, but it compounds. You only notice the tax three or four releases on, when the thing you shipped last quarter has to be unshipped and re-done.
42rem column · 65ch · DM Serif title · Lora body · Geist Mono meta · Cormorant pull quote
Application · Outline
On long reads the article column holds at 42rem, but the outline breaks out into the right margin — a quiet way to let readers jump sections without leaving the page.
Writing · essays
There is a particular kind of shipping — the kind you do because the calendar says to — that never once asks whether the thing is ready.
It ships because the slot is open, because the dashboard has a hole, because someone's quarter is ending. None of those are reasons. They are circumstances.
Body stays at 42rem · outline breaks out · Tufte / Gwern marginalia pattern
Application · Voice
Every post reads itself aloud. While ElevenLabs warms up the voice model, the title shimmers purple. Once the file is ready, the widget snaps to a standard transport and breaks out into the right margin.
State · generating
Generating audio narration…
First play primes the ElevenLabs AudioNative widget. Subsequent visits stream instantly.
shimmer-text-purple · 4s sweep · respects prefers-reduced-motion
State · ready
The patience tax on product design
07:42 · Narrated by Rachel · EN
Sits under the article title, can bleed right of the 42rem column on wider viewports.
ElevenLabs AudioNative · shimmer purple while generating · breaks right margin when ready
Application · Favicon
Same portrait mark in two tints — black for logos, blue for the favicon. One source SVG, recolored at export. Rounded in CSS at 22%.
Favicon · blue
/public/portrait-mark-blue.svg
Logo · black
/public/portrait-mark.svg
In browser chrome
<link rel="icon" href="/portrait-mark-blue.svg" /> <meta name="theme-color" content="#2563eb" />
One mark · two tints · black for logos · blue for favicon