A quote is set larger on the ink, opened by a mark in the primary. Its credit is the author, then the work, linked to its source.
Design system
Brand
The palette, type, shapes, diagram recipe and imagery rules: the north star for anything drawn or written for the site.
Principles
Five rules, and everything below is one of them applied
Paper and ink.
A white ground, black text and one colour: the primary for anything that acts, a pale tint of it, the accent, for anything that highlights. Nothing else is coloured.
Tokens only.
Every colour, radius and family is a token from the brand. A drawing that hard-codes a hex will not follow the site that shows it.
One family, and its mono.
Google Sans Flex at every size, Google Sans Code for kickers, numbers, values and code. Weight and tracking do the work.
Generous space.
Long leading, a 38rem reading measure, wide page padding. Whitespace is the layout; rules and shadows are not.
One marker line.
Every drawing is the sketch recipe: shapes outlined in the ink line, the one colour solid for the point and at a tint for the rest, the faceless man where someone does something, mono words, white paper. No gradients, no drop shadows, no 3D.
Palette
Nineteen tokens paint everything
The page is light. The chrome, the rail and the phone bars, is the same palette inverted. Swatches are painted from the live variables; the values beneath are the same colour as data.
Page
background
#ffffff
oklch(1 0 0)The ground. Paper on the page, near-black in the chrome.
foreground
#000000
oklch(0 0 0)Ink: body text, headings, icons at rest.
primary
#cc0099
oklch(0.565 0.242 343.5)The one colour: links, buttons, focus rings, the quote mark, diagram shapes.
primary-foreground
#ffffff
oklch(1 0 0)Text and marks placed on the primary.
accent
#ffdbf0
oklch(0.93 0.05 343.5)A pale tint of the primary, a fill only: text selection, notices, the menu row in focus. Never a button, never text.
accent-foreground
#000000
oklch(0 0 0)Text placed on the accent.
secondary
#000000
oklch(0 0 0)The inverse button: ink on paper, paper on chrome.
secondary-foreground
#ffffff
oklch(1 0 0)Text on the secondary.
muted
#eeeeee
oklch(0.95 0 0)A quiet fill: chips, hover, skeletons, embed backgrounds.
muted-foreground
#555555
oklch(0.45 0 0)Secondary text: standfirsts, captions, eyebrows, metadata.
card
#ffffff
oklch(1 0 0)A raised surface: every card in every shelf.
card-foreground
#000000
oklch(0 0 0)Text on a card.
popover
#ffffff
oklch(1 0 0)Floating surfaces: menus, dialogs, tooltips.
popover-foreground
#000000
oklch(0 0 0)Text on a popover.
border
#e1e1e1
oklch(0.91 0 0)Every rule and outline. The only line colour.
input
#ffffff
oklch(1 0 0)The field control’s fill.
ring
#cc0099
oklch(0.565 0.242 343.5)The focus ring. Follows the primary.
destructive
#e7000b
oklch(0.577 0.245 27.325)Errors and irreversible actions, tinted, never solid.
destructive-foreground
#ffffff
oklch(1 0 0)Text on a solid destructive fill (rare).
Chrome
background
#070707
oklch(0.13 0 0)The ground. Paper on the page, near-black in the chrome.
foreground
#ffffff
oklch(1 0 0)Ink: body text, headings, icons at rest.
primary
#dd0199
oklch(0.595 0.250 347.6)The one colour: links, buttons, focus rings, the quote mark, diagram shapes.
primary-foreground
#ffffff
oklch(1 0 0)Text and marks placed on the primary.
accent
#4e203d
oklch(0.32 0.08 343.5)A pale tint of the primary, a fill only: text selection, notices, the menu row in focus. Never a button, never text.
accent-foreground
#ffffff
oklch(1 0 0)Text placed on the accent.
secondary
#ffffff
oklch(1 0 0)The inverse button: ink on paper, paper on chrome.
secondary-foreground
#000000
oklch(0 0 0)Text on the secondary.
muted
#161616
oklch(0.2 0 0)A quiet fill: chips, hover, skeletons, embed backgrounds.
muted-foreground
#ffffff 60%
oklch(1 0 0 / 0.6)Secondary text: standfirsts, captions, eyebrows, metadata.
card
#1b1b1b
oklch(0.22 0 0)A raised surface: every card in every shelf.
card-foreground
#ffffff
oklch(1 0 0)Text on a card.
popover
#090909
oklch(0.14 0 0)Floating surfaces: menus, dialogs, tooltips.
popover-foreground
#ffffff
oklch(1 0 0)Text on a popover.
border
#1d1d1d
oklch(0.23 0 0)Every rule and outline. The only line colour.
input
#292929
oklch(0.28 0 0)The field control’s fill.
ring
#dd0199
oklch(0.595 0.250 347.6)The focus ring. Follows the primary.
destructive
#e7000b
oklch(0.577 0.245 27.325)Errors and irreversible actions, tinted, never solid.
destructive-foreground
#ffffff
oklch(1 0 0)Text on a solid destructive fill (rare).
On the primary
The words on a primary band, the article header’s and the reading list’s, sit inside .on-primary, a remap like the chrome’s. The ink becomes the primary’s foreground, and the rest follow it: the muted text at 78%, the primary itself, the border as a 35% hairline and the secondary as an 18% fill.
So the trail, the heading, the standfirst and the byline keep their own recipes and still read on the colour. Nothing on the band is restyled by hand.
The drawing sits outside it. A hero is drawn on the page tokens, so inside the remap its line and its colour would both turn white on its own white paper.
Type
One family and its mono
Every heading is the Heading component with a level and a variant. Every hero and section opens with the Header trio: a kicker, a heading, a subheading. Body leading is 1.7, 1.8 in an article.
Heading hero
2.25rem/3rem, 600, 1.15, tight tracking, balanced
The page's H1, in a hero
The quick brown fox jumps over the lazy dog.
Heading statement
1.5rem/1.875rem, 600, snug, tight tracking
A claim or a number: the splash, the CV stat, sign-in
The quick brown fox jumps over the lazy dog.
Heading title
1.25rem, 600, tight tracking
A block's title: the newsletter, a CV era
The quick brown fox jumps over the lazy dog.
Heading item
1.125rem, 600
A list or card title, an admin section
The quick brown fox jumps over the lazy dog.
Heading entry
1rem, 600
A row inside a list: a CV entry
The quick brown fox jumps over the lazy dog.
Heading small
0.875rem, 600
A group of fields, a sub-exhibit
The quick brown fox jumps over the lazy dog.
Kicker
Mono, 0.875rem, 500, uppercase, wide tracking, muted, a primary stroke
The eyebrow above a heading, one to four words
The quick brown fox jumps over the lazy dog.
Number
Mono, 0.875rem, 500, primary, two digits
The lead of a numbered list
01 02 03
Value
Mono, 0.75rem, muted
A colour value, a key, a size
The quick brown fox jumps over the lazy dog.
Subheading
1.25rem, relaxed, muted, 38rem measure
The standfirst under a heading
The quick brown fox jumps over the lazy dog.
Body
1.125rem, 1.8, 38rem measure
Article text
The quick brown fox jumps over the lazy dog.
UI
0.875rem, 500
Buttons, the rail, forms
The quick brown fox jumps over the lazy dog.
Caption
0.875rem, muted
Figure captions, metadata
The quick brown fox jumps over the lazy dog.
Shape and space
One radius, and every corner derives from it
Pages are 64rem wide, padded 1.5rem on phones and 2.5rem beyond. The reading measure is 38rem.
sm
8px
Small inline chips
md
10px
Menus, small controls
lg
12px
Images, embeds, focus outlines
xl
16px
ArticleBox, swatches
2xl
20px
Cards, panels
full
9999px
Buttons, chips, the brand mark
Components
The primitives, as shipped
Buttons are pills: the primary acts, the secondary is ink, the outline is quiet. Cards are one recipe, chips are one recipe, lists are one recipe.
Buttons
Badges, chips and marks
- Published
- Draft
- Soon
- Next.js
- Convex
ReviewLee’s pick
Cards
A card
Raised on the card token, bordered, 2xl corners, 1.5rem padding. The only box on the site.
A card that is a link
The whole card is the target: border darkens, ground tints, focus ring on keyboard.
Article blocks
Someone quotable, The work it came from
Diagrams
The heroes’ marker line, in the body
A diagram is code on the recipe, so it follows whichever site shows it.
A 1200 by 630 frame, landscape like the figure it sits in, so a diagram can be a featured image too. An image role with a title and a desc that say what the picture says.
The heroes’ marker line: every shape outlined in the black line, filled with the colour solid for the point of the picture and at a 16% tint for everything else. A curve that carries data is the line in the colour.
A word sits inside a shape in the mono face when it fits, and in a key in the top left corner when it does not. Numbers and captions on the paper are the muted mono face. The lines wobble; the words never do.
The man stands in where someone does something. Draw it as a component in the diagrams folder in the sketch frame, register it, and the editor can place it. Two circles, the tug and the signpost are the reference.
A chart is the same recipe fed data: one series, outlined in the line, the largest value solid and the rest tint, the bars on the ground line, the numbers in the mono face. The editor and the assistant write the numbers; the code draws them.
perfect-job · The perfect job: love, skill, money ikigai · Ikigai, the viral four-circle diagram two-circles · Two circles: love, lust and the discovery phase between them the-fade · The fade: what is left to discover, and what a weekend away buys the-tug · The tug of war: love one way, lust the other, him in the middle (animated) three-doors · Three doors: secrecy, consent, suppression (interactive) the-signpost · The signpost: two arms, both reading trust, pointing opposite ways, and him under it thinking the-test · The test: locked or unlocked, honest or cheating, four cells alike the-blank-cheque · The blank cheque: a passcode for a takeaway covers the whole phone (animated) the-slice · The slice: his life as a ring, her before and her after the-penalty-box · The penalty box: one axis from always available to unobtainable, and you sat at the wrong end the-short-hug · The short hug: four hugs on an axis of seconds, the one-second sliver and the lab’s twenty post-series-depression-cliff · The cliff: the high climbs episode by episode, then the credits roll (animated) expectations-gap · The gap: what you expected, what you got, and the disappointment between them the-box · The box: four sides, four seconds a side, a dot breathing round it (animated) ambiguity-silence · The silence: you assume at month one, you find out at month six, nothing said between (animated) ambiguity-fog · The fog: a road to a vanishing point, the far half lost in it vulnerability-seesaw · The seesaw: exposed one end, armoured the other, the balance over the pivot (animated) the-mask · The mask: him, and the mask he holds up on a stick beside his head self-reflection-window · The window: the Johari window, the open pane growing over the other three (animated) the-ledger · The ledger: what you have, what you want, and the eye on the wrong column (animated) touch-staircase · The staircase: handshake, arm, hug, hand, each step a riser, and him on the first the-dials · The dials: sleep, hunger, stress and pain on one dashboard, one in the red mindful-thin-band · The thin band: the past, the future, and the only bit your body is ever in stubbornness-seesaw · The seesaw: firmness one end, stupidity the other, the same stubbornness is the weight (animated) assertiveness-spectrum · The spectrum: passive, assertive, aggressive, the sweet spot marked, and me finding it (animated) empathy-waves · The waves: you and them, half a cycle out of step, sliding into one band (animated) active-listening-loop · The feedback loop: say, hear, reflect, clarify, and round again boundaries-drain · The drain: a tank of your energy, emptied an ask at a time (animated) boundaries-fence · The fence: what is yours inside, what is theirs outside forgiveness-fork · The fork: rupture, then fix it or f*ck it off; bury it is a dead end forgiveness-kintsugi · Kintsugi: a bowl in two pieces, the crack filled and the seam left showing (animated) the-mirror · The mirror: he points at everyone else, the reflection points back at him the-cage · The cage: her in the middle, the checking and the rules closing in as bars (animated) limerence-rollercoaster · The rollercoaster: a month of his mood, a spike on every message, the crash when they stop (animated) the-mark · The mark: one question sorts the 48 laws into poison, depends and keep fall-asleep-faster-curve · The bath curve: core temperature up in the bath, down when you get out, asleep on the way down (animated) skin-protocol-grid · The skin protocol: morning and night, three steps each, six cells alike learn-faster-sandwich · The sleep sandwich: study, sleep, study again, the night as the thick filling automaticity-curve · The learning curve: effort falling with practice, failed my test twice at the top, without a second thought at the bottom chart · Bar chart chart · Line chart chart · Donut chart
Heroes
A marker sketch at the top of every post
The napkin drawing of the post’s claim, in code on the tokens: live on the article, a 4:3 WebP on the cards, and the dashed band cropped out as the share image.
A 4:3 frame, 1200 by 900, for the article and the cards. The share image is its middle band, 1200 by 630, dashed on every drawing here: everything that carries the meaning sits inside it, and only the ground and the man may run past it.
White paper, a black marker line 10 wide with round ends, and one colour: solid for the point of the picture, once or twice, and a 16% tint for anything else that needs a fill.
Every line runs through one turbulence filter, so it wobbles as if drawn by hand. Words never wobble.
No title and no credit. A word sits inside a shape only when it fits in the mono face; otherwise a key in the top left corner names the shape, or an asterisk the key explains marks it.
The man is a circle and five straight lines with no face, and appears only when the post is about what someone does.
A hero may move, on the diagram rules, but its still is the picture: the card and the share image are the same drawing, rendered without the motion.
the-river-crossing · The river crossing: the farmer in a rowing boat on the river, an oar over the side (animated) wetter-the-more-it-dries · The tap: one drop hanging from a bathroom tap over the basin, falling (animated) the-surgeon · The surgeon: a close-up in a scrub cap and a solid mask, only the eyes showing, the tools on a tray under the theatre lamp (animated) privacy-paradox · The signpost: two arms, both reading trust, pointing opposite ways, and him underneath (animated) vulnerability · The empty shell: the turtle’s shell sat on the ground, and him stood beside it, out of it (animated) touch · The touch: her hand on his arm, and a heart over his head (animated) stubbornness · Heels dug in: an arrow pushes him from behind and he leans back against it (animated) skin-protocol · Morning and night: a sun and a moon, three bottles under each (animated) self-reflection · The wall: him on a plain chair facing a blank wall, an empty thought bubble overhead (animated) post-series-depression · The credits: him slumped on the sofa, the telly reading credits, the remote on the floor (animated) possessiveness · The wrist: she walks away, and he holds on (animated) neediness · Read at 14:02: him holding up his phone, the clock on the wall at 14:42 (animated) listen-to-your-body · The gauge: one big dial, the needle in the solid quarter (animated) limerence · The bubble: a huge thought bubble, and her, tiny, inside it (animated) learn-faster · The sandwich: a book, a pillow, a book, the sleep the thick part in the middle (animated) hugging · Twenty seconds: two people in a proper hug, a stopwatch over their heads (animated) how-to-fall-asleep-faster · The cool room: a bed, the thermometer low, the coffee crossed out (animated) how-to-be-mindful · The drifted head: his body on the ground, his head off to the right, a dotted line back (animated) gratitude · The pile: him sat on plenty, looking across at the one block he hasn’t got (animated) friendzone · The door: friend in the doorway, and him walking back in along a loop he has walked before (animated) forgiveness · Two ways out: one arrow loops back round to fix it, the other walks straight off the page (animated) expectations · The star and the dot: what he pictured over his head, what he got at his feet (animated) empathy · The bench: two people side by side, facing the same way, under one cloud (animated) breathwork · The breath: a circle in front of his chest, four counts round it, filling and emptying (animated) boundaries · The line: a circle drawn round him on the ground, and somebody stopped at its edge (animated) automaticity · The path: a track worn through long grass, and him walking it (animated) authenticity · The mask: him standing plain, the mask dropped on the ground beside him (animated) assertiveness · The word: him standing straight, and a speech bubble that says no (animated) ambiguity · The unsaid: him and her face to face, a dotted bubble between them with a question mark (animated) active-listening · The phone: she’s talking, and his head has gone to the phone buzzing on the table (animated) accountability · The boomerang: he points away, and the arrow comes round and points back at him (animated) 48-laws-of-power · The book: 48 on the cover, a tick on one side and a cross on the other (animated) temptation · The glance: him holding her hand, his eyes on the woman walking past (animated) apocailypse · The robot: twice his height, a square head on the same five lines, standing over him (animated) the-four-horsemen · The heart under fire: criticism, contempt, defensiveness and stonewalling, all aimed at it (animated) asap-breakup-guide · The crack: a heart pulled apart, and him walking away from it fast (animated) perfect-partner-paradox · The seesaw: the ground is perfect, the familiar weighs its end down onto it, the forbidden stays up in the air (animated) all-you-need-is-love · The column: seven blocks that hold it up, and love balanced on top (animated) perfect-job · The sweet spot: love, skill and money, and him sat where all three meet (animated) apoloogy · Him sat on the toilet, a note propped beside him that says I’m sorry (animated) riddles · The riddle placeholder, for a riddle with no hero of its own yet: him thinking, the dots up to the card with the riddle’s number (animated)
Article header
The band every post opens with
The real header with sample words: the trail, the title, the standfirst and the byline inside the remap, and the hero outside it on its own white paper.
Privacy Paradox
Should your missus be allowed to go through your phone?
Riddle
The riddle a riddle post opens on
The question, then the hint and the answer behind two buttons. Both are in the page for a search engine to read and stay closed until the reader opens them.
The riddle goes here, retold in plain British English: the opening paragraph, with no number and no label.
Give me a hintThe hint
A hint narrows it down without giving it away.
Reveal the answerHide the answer
The answer, said flatly
One line of take, only when it adds something.
Source: The source, linked to its official home
Socials
Every post’s hero, ready to post
The headline and the drawing in a square that every network keeps, made from the hero by the render script.
Two formats from one drawing: the Instagram post at 4:5, 1080 by 1350, and the story and the reel at 9:16, 1080 by 1920.
A 1:1 safe square sits in the middle of both, and everything keeps 72 in from its edges. Above and below it is paper, so a network that crops to the square loses nothing.
Inside it, top to bottom: the post’s title in the sans at 800, three lines at most, the hero framed like a card, and the site’s name in the mono face in the primary.
No standfirst and no credit. The headline is the title as the article prints it, and the drawing is the hero, rendered and never redrawn.
4x5 · Instagram post, 1080 by 1350, the safe square and its padding dashed Privacy Paradox A man thinking under a signpost whose two arms both read trust and point opposite ways Privacy Paradox Privacy Paradox A man stands thinking under a signpost. Its two arms point opposite ways and both read trust. A question mark hangs over his head. TRUST TRUST ? LEEW.BLOG 9x16 · Story and reel, 1080 by 1920, the safe square and its padding dashed
Profile image
One face for the logo, the byline and the tab
The photo cut out and set in the marker line’s rings, so the face in the rail, on a post and in the browser tab is the same picture.
One picture does every job: the logo in the rail, every byline and the head of the contact dialog, the tab icon and the home screen icon.
It is the photo cut out of its background, brightened and set in drawn rings. From the outside in: a thin white ring, the primary edged in a darker shade of it, a white ring as wide as the primary and its edges, then the primary at a 16% tint behind the face.
The hair breaks out over the top of the rings and nothing else does. The rings wobble like every drawing; the photo does not.
The rings are part of the picture, so no component adds one. The outside is clear, so it sits on the paper, the dark rail or the primary band.
It is one file in the codebase. Replace it and ship, and every place changes together; nothing keeps a copy. The tab icon is drawn from its middle when the site is built, the face in one ring, since the rings are noise at 16px.

profile.webp · The one file, with a clear background, in the brand folder SiteBrand · The rail at 48px and the phone bar at 32px, where the thin white ring shows Byline · On every post at 56px, opening the contact dialog icon · The browser tab at 32px and 16px: the middle of the same file, in one ring
Icons
Two sets and no others
Single-path brand marks for the networks, Lucide for the interface. Both take the current colour.
Writing
Plain British English, typeset properly
The same rules for a person and for an AI writing copy, code strings or alt text.
Curly quotes and apostrophes: ’ “ ”. Never the straight ones. Writers may type straight quotes in the editor; the site curls them.
No em dash and no en dash. Use a comma, a full stop or a colon. A hyphen joins words only.
British spelling, sentence case everywhere, no full stop at the end of a heading, kicker, label or button.
Kickers are one to four words. Numbers in a list are two digits, 01 to 99, in the mono face.
Dates read 01 Sep, 2026: two-digit day, three-letter month, four-digit year. One formatter prints every one of them.
No exclamation marks, no ellipsis, no emoji. Second person, short sentences, one idea each. Alt text says what the picture shows, never “image of”.
Two dots for a pause, as in “wait..”. Never three and never the ellipsis character. It is wrong on purpose, and nothing corrects it.
A swear is rare and for effect, its first vowel asterisked: sh*t, f*ck, b*llocks. Brutal is fine; vulgar is not.
Plain English, short and punchy. Open with the claim, name real examples, end honestly. No filler and no sentence that could open any article.
Imagery
Photos are photos, everything else is drawn
Both follow the five principles.
Photos are WebP, long edge at most 2000px, uploaded through the media library. Never store a URL. The profile image is the one picture that is a file instead (Profile image).
Alt text is never empty: the logo is “<site> logo”, an icon “<site> icon”, the profile image in a byline the author’s name, a body image what it shows.
Body images take the lg radius and the full measure. No captions baked into pixels; the caption is the ArticleMedia figure’s figcaption, small and muted, closed by a rule.
Anything drawn, whether a diagram, an illustration or a social card, is an SVG on the tokens. Hex values here are for tools that cannot read a variable, and are the light palette.
Brand marks are single-path icons filled with the current colour, always icon-only with an aria-label on the link. UI icons are Lucide, size-4, and aria-hidden beside their own text.

