Peter Wilder Product & UX Designer
Craft A working reference, not a styleguide

The system behind the site.

A design system is a set of decisions you only get to make well once — the tokens, the type axis, the scale, the single easing curve. This page documents the ones the rest of the site is built on, and demonstrates each in the same medium it governs.

Paper & ink.

Five values per side, one accent. No purple, no mint, no gradient — just two bones, two inks, and one lacquer spot — every pair contrast-checked in both editions. The swatches below re-render live when you switch theme.

--bg-0 · bone
--bg-1
--bg-2
--ink
--ink-2
--ink-3
--ink-4
--ink-4 · faint
--red · lacquer

Type grade anywhere for the live contrast audit.

The type system.

A display sans for statements, a monospace for instruments, a body sans for prose. Three open-source faces, each with one job. Heading emphasis is rationed to one lacquer word per heading — color carries the stress; the face and posture never change.

Display — Archivo, wdth 125 / wght 860

Close the gap.

Data — IBM Plex Mono

The instrument layer. Labels, metadata, timestamps, the command palette.

Body — Archivo

Body text for longer reading, set at a comfortable measure with a baseline-aligned rhythm.

The baseline scale.

Every margin, padding, and height is a multiple of eight pixels. The bars below are the actual spacing tokens, drawn to size.

One curve, five durations.

All motion on the site runs on a single easing curve — cubic-bezier(0.22, 1, 0.36, 1) — at one of five sanctioned durations. Hover a row to feel it.

Hairline rules.

Dividers are true half-pixel rules — structure without weight. Two tones: ambient and strong. The rules below are the real thing.


--rule · ambient hairline

--rule-strong · structural hairline

Every state, addressed.

The system documents its own components. Every state a real interface needs — not the happy path — designed, named, and demonstrated live in the medium it governs.

17 states designed, documented, and demonstrated below — not one of them the happy path.

Inventory · Buttons

Primary buttons.

Default Idle, focusable.
Hover Cursor over, color inverts.
Loading Action in flight, locked.
Success Action completed.
Error Action failed; click to re-shake.
Disabled Not interactive, explained.
Inventory · Form fields

Text inputs.

Default Idle, placeholder visible.
Hover Border darkens.
Focus Underline grows; no outline change.
Valid Validated server-side.
Invalid Validation failed.
Inventory · Toggles

Stateful toggles.

Off Default, no commitment.
On Active, value committed.
Try it Click to toggle.
Inventory · Empty / Loading / Error

Edge cases, designed.

No notes yet · this week.
Loading the next twelve weeks…
Connection failed Request couldn’t reach the server. Retry in a moment, or check your network.

Motion, specified.

Three moves, written down like any other token: the one easing curve, the activation tick, and the latch that decides when a plotted figure counts as read.

The curve cubic-bezier(0.22, 1, 0.36, 1) — every transition on the site rides this one curve, at 200 / 420 / 720 ms.
The tick Cursor activation is a plain state change — instant, no bounce. Restraint is the signature; nothing on the page performs.
The latch Leader lines draw with scroll and latch at 0.92 visibility; a settle-sweep guarantees the state for anchor jumps and reduced motion.