ghuneim.us · v1.0 · 2026

Design System

A specification for the rebuild. Type and content lead; chrome stays quiet. Legibility wins over aesthetics. Self-host everything.

01Principles

The site is a personal-authority site: long-form essays, a serious career record, surveillance-art curation. The design's job is to recede and make the writing and work read as credible and considered. Three rules govern every decision:

  1. Type and content lead; chrome stays quiet.One accent color, generous whitespace, no decorative gradients or shadows.
  2. Legibility is non-negotiable.Real essays get read here, so body text contrast and measure win over aesthetics whenever they conflict.
  3. Self-host everything.No third-party font CDNs, analytics, or embeds that leak visitor IPs. The privacy stance should be visible in the build, not just the prose.

The through-line is considered, archival, human, with a slightly severe edge, matching "Evolve or Perish."

02Color

The "Archive" light scheme is the default. A dark "After Hours" variant is available for an optional reading toggle but is not the default.

RoleHexNotes
Page background#F4F1EAwarm off-white / paper, not stark white
Surface (cards)#FBFAF6barely lifted from the bg
Body text#1F2421near-black with a green undertone, ~14:1 on the bg
Muted text (dates, tags)#6B7069passes AA for the small grey metadata you already use
Primary accent (links, buttons)#2F4A3Cyour forest green, deepened slightly so link text on paper clears 7:1
Hover / active#436B54lighter green for hover states
Borders / hairlines#E0DBD0the thin separators between list items

03Typography

A serif with character for headings (signals editorial, not SaaS) against a serif body for reading. Both self-hostable, both free.

Primary recommendation

Premium upgrade path

Decide on cost later. Swap Fraunces for GT Sectra orTiempos Headline (Klim) for headings, andTiempos Text or Lyon Text for body. These push the site from "very good" to "distinctly high-end." Klim and Commercial Type both license well and self-host cleanly.

Specimens

Heading — Fraunces 600, opsz 96
The alteration of the C's
Body — Source Serif 4 Regular, 18px / 1.7
In the early nineties, a few of us plugged into the first set of C's. They came as alliteration before they came as analysis. Connectivity, convenience, commerce, communication, you said them the way you say a spell, and they named what the new thing was for.
Mono — IBM Plex Mono Regular
US Patent 8,271,429 · 2008-03-26 · /blog/the-alteration-of-the-cs/

Type scale

A 1.250 major-third ratio at 18px base for comfortable reading.

TokenSize / line-heightUse
--text-xs13px / 1.5tags, metadata, mono
--text-sm15px / 1.6captions, muted
--text-base18px / 1.7body, essays
--text-lg22px / 1.5lead paragraphs
--text-xl28px / 1.3h3 / project titles
--text-2xl38px / 1.2h2 / section heads
--text-3xl54px / 1.1h1 / name

Reading measure. Cap essay body at 66–72ch. Headings can run wider.

04Spacing & Layout

An 8px base scale: 4, 8, 12, 16, 24, 32, 48, 64, 96. Content column max-width 720px for prose, 1100px for project and featured grids. Section vertical rhythm: 96px between major sections on desktop, 56px on mobile. The hairline borders (#E0DBD0) between blog-list items and citations are the main structural device. Keep them 1px and let space do the rest.

05Components

Worth defining explicitly so the build is consistent.

06Accessibility

07Imagery

The featured-work thumbnails vary wildly in source — a 2019 JPG, an SVG, scanned book covers. Normalize them: consistent aspect ratio (4:3 or 16:9), consistent corner treatment (square or a uniform small radius; go square to match the severe / archival feel), and a 1px border in the hairline color so mismatched images sit in a consistent frame. Don't apply a green duotone or filter; let the work be itself.

08Tokens

Drop-in CSS, ready for the rebuild.

:root {
  /* color */
  --bg: #F4F1EA;
  --surface: #FBFAF6;
  --text: #1F2421;
  --text-muted: #6B7069;
  --accent: #2F4A3C;
  --accent-hover: #436B54;
  --border: #E0DBD0;

  /* type */
  --font-head: "Fraunces", Georgia, serif;
  --font-body: "Source Serif 4", Georgia, serif;
  --font-mono: "IBM Plex Mono", ui-monospace, monospace;

  --text-xs: .8125rem;  --text-sm: .9375rem;
  --text-base: 1.125rem; --text-lg: 1.375rem;
  --text-xl: 1.75rem;   --text-2xl: 2.375rem; --text-3xl: 3.375rem;

  /* space (8px base) */
  --s-1: 4px;  --s-2: 8px;  --s-3: 12px; --s-4: 16px;
  --s-6: 24px; --s-8: 32px; --s-12: 48px; --s-16: 64px; --s-24: 96px;

  --measure: 70ch;
  --radius: 0;
}