The working brief for the redesign — palette, type, motifs, motion. Codename: Field Journal.
This redesign comes from Melbourne. Not literally — the bytes live wherever Vercel decides — but in feel. The city the writing comes from sets the tone of every choice in the palette.
Melbourne is not a glossy city. It's a city of wet bluestone laneways, brick warehouses in Collingwood, faded Fitzroy terraces under terracotta roofs. The dominant colour is brown, not blue. The dominant feeling is warm despite the weather — sodium streetlights, wool jumpers, paperback library covers, coffee that takes itself seriously.
Warm Melbourne, not SF gloss.
The page background is warm soot, not black. The light-mode background is cream paper, not white. Both modes carry the same warmth; only the polarity flips — same room, different time of day.
The accent is clay — iron-oxide rust on a wrought-iron fence; the brick of a Fitzroy wall; the rooftops you see from Punt Road on a clear afternoon. A colour that has been around long enough to oxidise. It carries every link, every active state, every § anchor.
The spotlight is signal yellow — the slightly buttery yellow of the green-and-yellow trams that ran the city for half a century. It appears only for things that genuinely matter: a pinned essay, a code string, a single sentence asking to be read first.
Every neutral is steel-warm — brown-grey, never blue-grey. Bourke Street pavement is brown after rain. San Francisco grey is blue. We don't do San Francisco grey here.
Everything that follows — the principles, the type scale, the motion tokens — is in service of that one idea. The site should read as if it came from a city that knows what a wool jumper is for.
Five principles govern every decision in this system. When tokens conflict, the principle wins.
Two surfaces — cream paper and warm soot — paired with one warm accent (clay) and one buttery spotlight (signal). Every neutral reads warm. Hexes for both modes are listed on each card; the painted area shows the live theme.
Page background. Cream paper in light, warm soot in dark.
Code blocks, raised cards. The slightly recessed surface.
Subtle elevations, callouts, sidenotes.
Primary body text. Reads as warm near-black or warm near-white.
Decks, secondary text, blurbs.
Captions, mono meta, tertiary type.
Clay. Links, kicker numbers, anchor §, hover, diagram strokes, active TOC.
Buttery yellow. Spotlights only — pinned essays, code strings, "the one thing that matters".
Hairlines, dividers, frame borders. Always semi-transparent so the surface beneath shows through.
Mid-grey neutral. Mode-agnostic.
Mid-tone neutral. Mode-agnostic.
Light borders, inactive states. Mode-agnostic.
These colors live in the wider Kochie Engineering family but never appear in blog chrome. They're documented here so a future edit doesn't accidentally reach for them.
Reserved for me.kochie.io.
Reserved for touch-typer.kochie.io.
Cool blue master accent. Replaced on the blog by clay.
Terminal green. Explicitly retired from the blog.
Three families. Source Serif 4 carries display and body — it's the brand. Geist Mono handles every kicker, caption, and code line. Geist Sans only ever appears in chrome (nav, UI controls).
Small recurring patterns that give the publication its rhythm. Always mono, always with the leading slash, almost always with one element coloured clay.
Article kicker.The article number is in clay; tags follow in mono uppercase separated by middle dots.
Figure caption.Numbered per article. Source attribution sits below the caption in smaller mono.
Equation label.Separate counter from figures. KaTeX block in the wide tier.
Section label.First word after the slash is in clay; tail copy in soft text.
Italic deck.Serif italic, ≤25 words. Sits under every H1.
Anchor mark.Every H2 and H3 carries an id. Hovering reveals a clay § to the left — a copy-link target.
Articles use three width tiers. Embeds opt in via the tier prop on <Figure>. The bars below are drawn at scale — the hairlines mark each tier's right edge.
Site chrome — topbar and footer — caps at 86rem (1376px). The body grid centers content within this on wide screens and reserves a 14rem gutter on the left for the sticky TOC.
Motion is sparing. Hover and focus get 150ms; theme switches and drawers get 250ms. Easing is out-expo so transitions decelerate gracefully. Anything triggered by scroll position is forbidden — no fade-ins on viewport entry.
Hover, focus, link colour, border tints.
Theme switch cross-fade, drawer open/close.
Out-expo. Fast at the start, slow into the rest.
Users with prefers-reduced-motion: reduce see no transitions at all — both tokens drop to 0ms.
The mark is a four-color stylized K — orange, dark red, and yellow on transparent. It sits in the topbar, the favicon, and inside the OpenGraph card; it never recolors to follow the theme. Inline icons come from Font Awesome Pro Duotone; they take their color from currentColor, so a hovered icon picks up the clay accent automatically.
Stylised K. Three master fills: orange , red , yellow .
Lightbulb-slash icon. Click cycles to light.
Lightbulb-on. Click cycles to system.
Cogs. Follows the OS preference.
Documenting what the system explicitly does not use is almost as load-bearing as documenting what it does. Future edits shouldn't accidentally reintroduce these.