Designing a terminal site that is actually readable
A lot of “terminal” websites fall into one of two traps. Either they lean so hard into the bit that everything is oversized neon monospace on pure black — fun for ten seconds, exhausting to read — or they go so dense that the page feels like a config file you’re being asked to debug.
This site tries to keep the frame of a terminal while letting the content breathe. Here’s the short version of how.
Two typefaces, clear jobs
Monospace does the chrome: navigation, headings, code, and the little prompt motifs. A proportional typeface does the reading. Mixing them sounds risky but the division of labor is what makes it work — your eye learns that mono means “interface” and the body means “prose.”
:root {
--font-mono: 'JetBrains Mono Variable', ui-monospace, monospace;
--font-body: 'Inter Variable', system-ui, sans-serif;
}
body {
font-family: var(--font-body);
font-size: 1.0625rem; /* a hair over 16px */
line-height: 1.7;
}
Restraint over spectacle
A few rules I kept coming back to:
- Cap the measure. Lines run to about 68 characters. Wider than that and your eye loses its place on the return sweep.
- Keep glyphs calm. The biggest heading on the site is under 2rem. Size is a tool for hierarchy, not for shouting.
- One accent color. A single soft cyan, used sparingly. Color that’s everywhere stops meaning anything.
| Choice | Cartoony version | What I did instead |
|---|---|---|
| Background | #000000 |
#0d1117 slate |
| Accent | neon green glow | muted #56b6c2 |
| Body type | all monospace | proportional Inter |
Themes without the flash
The one genuinely fiddly bit is honoring the reader’s system preference and
remembering a manual override and never flashing the wrong colors on load.
The trick is a tiny blocking script in the <head> that sets the theme before
the first paint:
const stored = localStorage.getItem('theme');
const theme = stored ?? (matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light');
document.documentElement.setAttribute('data-theme', theme);
Everything else is just CSS custom properties swapping behind that attribute.
The point
The terminal look is a vibe, not a constraint. Keep the prompt, keep the mono chrome, keep it monochrome-ish — then get out of the way and let people read. That’s the whole trick.