Sheet label
<SheetLabel> · .v-sheet-label
Numbers every section, like a drawing sheet. Accent square and rule, uppercase mono on a ground band.
Sheet 02 · Operating principles
03 · Design system
Vellum: the tokens, components and patterns shipping under the IrvingSpace name. Everything here is the site's own code, rendered live, so this page can't drift from what ships. The reasons behind it live in visual identity.
01 · Tokens
Hex values live in one file, vellum.css, as CSS variables; components only ever use the variable. The chips below paint with the live variables.
The color concept
Product + AI = Systems, with a human in every loop. Product is the accent blue; AI is yellow, brighter as it acts with less oversight; systems is green, blue and yellow combined; the human is purple, and never a topic.
Roles, rules and contrast: visual identity → color
02 · Components
Each one is the component the site renders, from web/src/components/site. Square corners, ink outlines, tokens only.
<SheetLabel> · .v-sheet-label
Numbers every section, like a drawing sheet. Accent square and rule, uppercase mono on a ground band.
Sheet 02 · Operating principles
<PaperCard> · .v-paper-card
Anything that isn't the page itself. Solid paper, a 1.5px ink outline, and never the grid inside.
The problem space
Knowing where you are changes everything about how you work.
<ColorBlock> · .v-color-block
The accent at full strength, the grid showing through in white. For the moment that matters on a page: subscribe, or a way onward.
Color block
The grid shows through in white.
<Button variant> · .v-button--primary | secondary | accent | mono
48px tall, square. Primary is ink; secondary is paper with an ink outline; accent is the header Subscribe; mono is for list links.
<TopicTag topic aiLevel> · .v-topic-tag
A post's topic on a 24px tag. AI tags always carry level pips, and name the level to screen readers.
<LevelPips level size> · .v-level-pips
Four squares in an ink outline, filled to the level. 7px in tags, 11–14px in large swatches. Autonomy is never color alone.
<AutonomyScale> · .v-autonomy
The four AI levels side by side: brightest means least human in the loop.
<HumanMarker> · .v-human-marker
The person: a purple square and a mono label, on the author card and post bylines. The only purple outside figures.
Author · Human
<TopicStrip> · .v-strip
A full-bleed paper band under the home hero: the three topics, each with a sparkline in its color.
<Nav> · .v-nav
Full-bleed paper bar, 72px (56 on phones), sticky, ink rule below. Uppercase mono links; the current page in accent with a tab on the rule. Below 640px the links fold into a menu.
<Footer> · .v-footer
The page ends like a drawing: a ruled title block of context, author, copyright and other places to find the work.
<PostLogRow> · .vb-log__row
One post in the log: tag, date and read time beside the title and excerpt. AI posts add a fourth line naming the autonomy level. This one is live from the log.
<SubscribeBlock> · .vb-subscribe
A color block with the ask on the left and the action on the right: an email form, or a link button when it points somewhere on the site.
Subscribe
Follow my thinking as it takes shape.
.vb-premise
A statement of belief in a dashed accent frame: paper, an accent label, the quote in Archivo 500.
Note 01 · The premise
It's a place to navigate through ideas, because exploring is how I figure out what I actually believe.
03 · Patterns
The moves that repeat across pages. Each one keeps the drawing-sheet idea intact.
.type-display-h1 > span + span.accent
The hero asks its question in two lines, breaking at the color change: line one ink, line two accent.
Are you solving forthe right problem?
.v-hero-band
When nothing sits right under the hero (About, a post, the 404), the hero goes on an accent band with the grid in white. Home and Writing keep plain ground, since a strip or the filter band follows.
About · John Irving
I'm not here to tell you what to build.I'm here to ask better questions about why.
.vb-filterband
On Writing, the topic filter sticks under the nav, tucked under its rule so the two read as one line. Chips show counts; the current one fills with ink.
<DocsLayout rail={<DocsIndex …/>}> · .v-docs
Long reference pages (the brand guide, this design system, templates) get a full-height index rail on the left: paper, ruled in ink like the nav and flush with the screen's edge, so the two read as one frame. The index sits in the frame's first two columns, in line with the logo, and marks the section in view; the content takes the other eight. Below 1024 the rail folds into a sticky chapter bar.
<SheetLabel>Sheet 0n · …</SheetLabel>
Home sections are numbered drawing sheets; brand pages number their chapters. The number says where you are in the set.
Sheet 01 · Product · AI · Systems thinking
Sheet 02 · Operating principles
Sheet 03 · Writing log
.v-band
Supporting copy over the grid sits on a ground band: it reads cleanly without becoming a card.
I write about the questions that get squeezed out when everyone's moving fast.
.type-display-h2.v-sec__title
Section headings stay on one line, directly on the grid. If it doesn't fit, the heading is too long.
Three ideas that shape how I look at most things
04 · Principles
When a component decision isn't obvious, these settle it. They're the usage rules from the brand guide, applied to product.
Do
Don't