Skip to main content
// FIELD MANUAL

A field journal.

The working brief for the redesign — palette, type, motifs, motion. Codename: Field Journal.

By Robert KochWARM MELBOURNE, NOT SF GLOSSEVERGREEN
// MANIFESTO

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.


// 01

Principles.

Five principles govern every decision in this system. When tokens conflict, the principle wins.

  1. 01
    Type does the work. A strong typographic system carries the brand. The serif body is the identity.
  2. 02
    The figure frame holds everything. Code, video, tweet, math, canvas — same numbered, mono-captioned frame. Sibling content reads as siblings.
  3. 03
    Warm Melbourne, not SF gloss. Every neutral is brown-grey, every accent biased warm. No cool slates, no terminal greens.
  4. 04
    Hook first, hero second. The article opening rewards a strong first sentence over a giant image. Hero figures are optional.
  5. 05
    Dark-first, light first-class. Both modes are designed simultaneously. Same warmth across both.

// 02

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

  • // bg

    Page background. Cream paper in light, warm soot in dark.

    LIGHT
    #F4EDD9
    DARK
    #1A1815
  • // bg-deep

    Code blocks, raised cards. The slightly recessed surface.

    LIGHT
    #ECE2C6
    DARK
    #14110E
  • // bg-soft

    Subtle elevations, callouts, sidenotes.

    LIGHT
    #FAF6E8
    DARK
    #232019

// TEXT

  • // text

    Primary body text. Reads as warm near-black or warm near-white.

    LIGHT
    #1A1815
    DARK
    #F4EFE6
  • // text-mute

    Decks, secondary text, blurbs.

    LIGHT
    #4D4538
    DARK
    #C9C0B0
  • // text-soft

    Captions, mono meta, tertiary type.

    LIGHT
    #847A6B
    DARK
    #8C8576

// ACCENTS

  • // accent

    Clay. Links, kicker numbers, anchor §, hover, diagram strokes, active TOC.

    LIGHT
    #C46A4A
    DARK
    #DA8665
  • // signal

    Buttery yellow. Spotlights only — pinned essays, code strings, "the one thing that matters".

    LIGHT
    #DBC23A
    DARK
    #F2DC4A

// NEUTRALS & RULES

  • // rule

    Hairlines, dividers, frame borders. Always semi-transparent so the surface beneath shows through.

    LIGHT
    rgba(26,24,21,0.12)
    DARK
    rgba(244,239,230,0.08)
  • // steel-warm-700

    Mid-grey neutral. Mode-agnostic.

    LIGHT
    #58504A
    DARK
    #58504A
  • // steel-warm-500

    Mid-tone neutral. Mode-agnostic.

    LIGHT
    #8C8576
    DARK
    #8C8576
  • // steel-warm-300

    Light borders, inactive states. Mode-agnostic.

    LIGHT
    #C9C0B0
    DARK
    #C9C0B0

// 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.

  • // coral#F26D5B

    Reserved for me.kochie.io.

  • // key#0E7C7B

    Reserved for touch-typer.kochie.io.

  • // wire#1F4FFF

    Cool blue master accent. Replaced on the blog by clay.

  • // terminal#00D17A

    Terminal green. Explicitly retired from the blog.


// 03

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).

// SERIF
Source Serif 4
Display + body.
// MONO
Geist Mono
Kickers, captions, code.
// SANS
Geist Sans
Nav and UI only.

// TYPE SCALE

  1. // display-hero3.75 rem (60px)LH 1.02600
    A field journal.
    Homepage hero headline.
  2. // display-h12.75 rem (44px)LH 1.05600
    Halo physics, slowly.
    Article H1.
  3. // h21.75 rem (28px)LH 1.15600
    Building the stack.
    Article H2, homepage section titles.
  4. // h31.25 rem (20px)LH 1.30600
    Defining the schema.
    Article H3, card titles.
  5. // deck1.1875 rem (19px)LH 1.45400 italic
    A one-sentence orientation for readers who need more context before committing.
    Italic deck under headlines.
  6. // body1.0625 rem (17px)LH 1.70400
    Articles open with a kicker, an H1, and a deck — then they earn the reader's next click.
    Article body.
  7. // body-sm0.9375 rem (15px)LH 1.55400
    Card blurbs and ancillary copy live here. Slightly tighter, slightly smaller.
    Cards, secondary blocks.
  8. // meta0.75 rem (12px)LH 1.50500
    // 12 · SOFTWARE · MELBOURNE
    Mono kickers, dates, figure captions.
  9. // ui0.875 rem (14px)LH 1.50500
    Archive · Tags · RSS
    Sans-serif nav and UI.

// 04

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.

  • // 13SOFTWARE · MELBOURNE

    Article kicker.The article number is in clay; tags follow in mono uppercase separated by middle dots.

  • FIG. 04An artificial gravity lab

    Figure caption.Numbered per article. Source attribution sits below the caption in smaller mono.

  • EQ. 02a = v² / r

    Equation label.Separate counter from figures. KaTeX block in the wide tier.

  • // ARCHIVEall essays, by year

    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.


// 05

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.

// prose40rem · 640px
Paragraphs, lists, blockquotes, default text.
// wide55rem · 880px
Code blocks, equations, GitHub project cards.
// bleed78rem · 1248px
Hero figures, full-width canvases, large diagrams.

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.


// 06

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.

  • // motion-fast
    150ms

    Hover, focus, link colour, border tints.

  • // motion-slow
    250ms

    Theme switch cross-fade, drawer open/close.

// motion-ease
cubic-bezier(0.16, 1, 0.3, 1)

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.


// 07

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.

// IDENTITY MARK

Stylised K. Three master fills: orange , red , yellow .

// THEME · DARK

Lightbulb-slash icon. Click cycles to light.

// THEME · LIGHT

Lightbulb-on. Click cycles to system.

// THEME · SYSTEM

Cogs. Follows the OS preference.


// 08

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.

  • 01
    The PCB-image jumbotron homepage. Replaced by a Spectrum-style hero feature plus a numbered archive.
  • 02
    Lato as the primary font. Replaced by Source Serif 4 for body, Geist for mono and sans.
  • 03
    Terminal green on near-black. Reads as code-IDE register. The blog wants editorial register.
  • 04
    Cool-slate base tokens. Replaced by warm soot, cream paper, and steel-warm neutrals.
  • 05
    Title Case headings. Sentence case throughout, always.
  • 06
    Hero text scroll-reveal animations. Hero never animates on scroll. The first sentence does the work.
// END OF MANUAL