A field journal.
The working brief for the redesign — palette, type, motifs, motion. Codename: Field Journal.
Warm Melbourne.
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.
Principles.
Five principles govern every decision in this system. When tokens conflict, the principle wins.
- Type does the work. A strong typographic system carries the brand. The serif body is the identity.
- The figure frame holds everything. Code, video, tweet, math, canvas — same numbered, mono-captioned frame. Sibling content reads as siblings.
- Warm Melbourne, not SF gloss. Every neutral is brown-grey, every accent biased warm. No cool slates, no terminal greens.
- Hook first, hero second. The article opening rewards a strong first sentence over a giant image. Hero figures are optional.
- Dark-first, light first-class. Both modes are designed simultaneously. Same warmth across both.
Palette.
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.
// SURFACES
Page background. Cream paper in light, warm soot in dark.
Code blocks, raised cards. The slightly recessed surface.
Subtle elevations, callouts, sidenotes.
// TEXT
Primary body text. Reads as warm near-black or warm near-white.
Decks, secondary text, blurbs.
Captions, mono meta, tertiary type.
// ACCENTS
Clay. Links, kicker numbers, anchor §, hover, diagram strokes, active TOC.
Buttery yellow. Spotlights only — pinned essays, code strings, "the one thing that matters".
// NEUTRALS & RULES
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.
// RESERVED— do not use on the blog
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.
Typography.
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).
// TYPE SCALE
- A field journal.Homepage hero headline.
- Halo physics, slowly.Article H1.
- Building the stack.Article H2, homepage section titles.
- Defining the schema.Article H3, card titles.
- A one-sentence orientation for readers who need more context before committing.Italic deck under headlines.
- Articles open with a kicker, an H1, and a deck — then they earn the reader's next click.Article body.
- Card blurbs and ancillary copy live here. Slightly tighter, slightly smaller.Cards, secondary blocks.
- Mono kickers, dates, figure captions.
- Archive · Tags · RSSSans-serif nav and UI.
Typographic motifs.
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.
- A one-sentence orientation for readers who need more context before committing.
Italic deck.Serif italic, ≤25 words. Sits under every H1.
- §Linkable heading
Anchor mark.Every H2 and H3 carries an id. Hovering reveals a clay § to the left — a copy-link target.
Width tiers.
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.
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.
- 150ms
Hover, focus, link colour, border tints.
- 250ms
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.
Iconography.
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.
What we retired.
Documenting what the system explicitly does notuse is almost as load-bearing as documenting what it does. Future edits shouldn't accidentally reintroduce these.
- The PCB-image jumbotron homepage. Replaced by a Spectrum-style hero feature plus a numbered archive.
- Lato as the primary font. Replaced by Source Serif 4 for body, Geist for mono and sans.
- Terminal green on near-black. Reads as code-IDE register. The blog wants editorial register.
- Cool-slate base tokens. Replaced by warm soot, cream paper, and steel-warm neutrals.
- Title Case headings. Sentence case throughout, always.
- Hero text scroll-reveal animations. Hero never animates on scroll. The first sentence does the work.