Design System: Derek Weitzel

Overview

Creative North Star: “The Engineering Notebook”

This is a record before it is a presentation. The system behaves like a well-kept lab notebook: everything is dated, everything is labeled, nothing is claimed that isn’t written down. Panels are pages — hairline-ruled rectangles that hold one coherent unit of content. Monospace runs in the margins as annotation: dates, section eyebrows, tags, the footer colophon. The sans face carries the substance. The separation is strict and it is the system’s core discipline.

The register is precise, quiet, and technical, and it is comfortable being dense. Information-forward is a feature here: a page may carry a lot at once, and scanability comes from consistent rhythm and hard hierarchy rather than from breathing room. Restraint is doing credibility work — an infrastructure engineer’s site earns trust by being exact, not by being impressive.

Two anti-references bound this from both sides. It is not a startup landing page: no gradient headline text, no floating testimonial cards, no funnel energy, no persuasion architecture. It is equally not an academic default: no serif CV page, no unstyled bullet lists, no 1990s faculty-homepage plainness. The system sits deliberately between them — contemporary and carefully built, but pointed at the record rather than at the reader’s decision.

Dark mode is a first-class state, not an inversion afterthought. It ships with its own hand-tuned text ramp because the utility-layer defaults were not good enough.

Key Characteristics:

Colors

A slate-dominant neutral field with a single blue accent reserved for interaction, one cyan wash for taxonomy, and two colors that appear so rarely they function as punctuation.

Primary

Secondary

Tertiary

Neutral

Named Rules

The Sky-Is-Interaction Rule. Sky means “this responds.” It is never a heading color, never a section-header decoration, never a fill for a static surface. If an element is not clickable or focused, it is not sky.

The Two-Authored-Themes Rule. Light and dark are both designed, and neither is derived from the other by filter or inversion. Any new color must be specified in both, and the dark value must be checked against the main.scss override block before being assumed.

Typography

Display Font: Space Grotesk (with ui-sans-serif, system-ui, sans-serif) Body Font: Space Grotesk — the same face, differentiated by weight and tracking rather than by family Label/Mono Font: IBM Plex Mono (with ui-monospace, SFMono-Regular, monospace)

Character: A two-face system doing three jobs. Space Grotesk’s slightly mechanical geometry keeps headings from reading as either corporate or scholarly — it is contemporary without being trendy. IBM Plex Mono is the annotation voice: every date, eyebrow, tag, and code span. The pairing is what makes the notebook metaphor legible; drop the mono and the system reads as a generic Tailwind site.

Both load from Google Fonts with preconnect, a preload hint, and a media="print" / onload swap, with a <noscript> fallback. Weights are deliberately narrow: 400/500/600/700 for the sans, 400/500/600 for the mono.

Hierarchy

In-prose headings run 2.2rem / 1.9rem / 1.45rem at line-height 1.2 with mt-8 mb-3, well below the page-title scale so an article’s internal structure never competes with its title.

Named Rules

The Mono-Is-Metadata Rule. IBM Plex Mono carries dates, section eyebrows, tag chips, inline code, code blocks, and the footer colophon. It never sets a heading, never sets body copy, and never runs longer than a short phrase. If mono is carrying meaning rather than labeling it, it is being misused.

The Tight-Heading Rule. Every heading carries negative tracking — -0.015em globally on h1h6, tightening toward -0.025em (tracking-tight) at title sizes and up. Headings never sit at default tracking.

Layout

A single centered column at max-w-7xl (80rem) with px-4 gutters stepping to px-6 at sm. Every page uses it; there is no full-bleed surface except the fixed ambient-orb layer and the sticky header’s background.

Vertical rhythm. Home sections run py-16, compressing to py-9 below sm, separated by a full-width hairline (border-t-2 on mobile, border-t from sm up — heavier on small screens where the section spacing is tighter). Content pages use py-10 stepping to py-12/py-16 at lg. Panel interiors step p-6p-8 @sm → p-10 @lg.

Grids. Two-column content pages put the sidebar on a fixed track: lg:grid-cols-[minmax(0,1fr)_300px] for post TOCs and [minmax(0,1fr)_320px] for project pages, both with lg:sticky lg:top-24 on the aside. The home hero inverts the usual weighting with lg:grid-cols-[minmax(0,0.76fr)_minmax(0,1.24fr)] — the photograph is deliberately the smaller half. Card grids vary by density: projects go sm:2 → xl:3, home project chips go sm:2 → lg:3 → xl:4, and the blog splits lg:[minmax(0,2fr)_minmax(280px,1fr)].

Density. Information-forward by intent. The home page stacks hero, projects, technologies, and blog with a sidebar; project pages carry two sidebar panels. The system does not use whitespace to signal importance — hierarchy comes from type scale and the hairline grid.

Breakpoints. Tailwind defaults, unmodified: sm 640px, md 768px, lg 1024px, xl 1280px. md is the navigation breakpoint (desktop nav and theme toggle appear; hamburger disappears). sm is the layout breakpoint for nearly everything else. Several components use max-sm: to increase weight on small screens rather than reduce it — borders thicken to 1.5px, shadows deepen, padding tightens.

Elevation & Depth

Flat at rest; depth is a response. Surfaces sit flush in the field and are separated by a 1px ring, not by a shadow. The shadows that exist at rest are almost subliminal — a 1–3px offset at 6–8% opacity — present only to keep a white card from dissolving into a near-white field. Real depth is reserved for interaction: cards lift, buttons press, and the ring brightens.

Behind everything sits a fixed, non-interactive atmosphere layer: two large blurred orbs (cyan and fuchsia, blur-3xl, 10% light / 5% dark). This is the only ambient depth in the system and it never moves or responds.

The sticky header is the one element using material rather than geometry: bg-white/80 with backdrop-blur, so content dissolves under it rather than colliding with it.

Shadow Vocabulary

Named Rules

The Ring-First Rule. Structural separation is a 1px ring (ring-1 ring-slate-200, dark:ring-slate-600/75), never a shadow. If a new surface needs to be distinguished from the field, it gets a ring. Reach for a shadow only when the surface is also lifting.

The Flat-At-Rest Rule. A surface at rest carries at most a 3px, ≤8%-opacity shadow. Anything heavier must be justified by a state change — hover, focus, or the sticky header’s material.

Shapes

Rectilinear and calm, with a radius scale that is genuinely functional rather than uniform. Corners get rounder as content gets softer: buttons and project cards are crisp at 0.375rem, panels and post cards sit at 0.5rem, and embedded media rounds further — prose images at 0.85rem, code blocks at 0.9rem (dropping to 0.5rem below sm, where a large radius on a narrow block wastes width).

Fully-round (9999px) is reserved for things that are conceptually tokens rather than containers: tag pills, technology badges, and the theme toggle. Archive tag chips are the deliberate exception — they use the smallest radius (0.25rem) with mono 10px uppercase text, reading as terminal output rather than as pills.

Borders are hairlines, almost always expressed as a ring or a low-opacity border (border-slate-900/15, border-slate-600/40). Solid full-opacity borders do not appear. Below sm, project cards thicken to 1.5px to survive the smaller viewport.

The home hero figure is the one framed object in the system: a bordered container with the image on a 16:10 crop (16:9 from sm) at saturate(0.92), capped with a bordered, centered mono caption bar — a plate in a notebook.

Components

Buttons

Chips

Cards / Containers

Inputs / Fields

The site has no forms. If one is added, it inherits the global transition and the global focus outline (2px solid rgba(14,165,233,0.85), 3px offset); match panel geometry — 0.5rem radius with a slate-200 hairline — rather than inventing a field style.

Signature Component: the mono section eyebrow

Major sections are introduced by a mono, uppercase, wide-tracked line prefixed with a double slash — // research infrastructure, // systems, // writing, // project. It sits directly above the heading in a muted slate, borrowing a code comment to label a region of the page. It appears on seven sections today and is the most recognizable move in the system.

This is a house pattern, not an invariant: use it where a section benefits from a label, and leave it off where it would be noise. Do not require one on every new section, and do not let its frequency creep to the point where it stops reading as an annotation.

Do’s and Don’ts

Do:

Don’t: