Colophon
This site is hand-built with
Astro 5 ↗ — static HTML,
no client framework — and deployed to GitHub Pages from a single workflow. But the part
worth writing down is the color: every palette you can pick here is generated at build
time from my dotfiles theme engine, the same
colors.json files that theme my terminal. The whole thing is
open source ↗.
The pipeline
One schema fans out to nine consumers. A single colors.json per variant
drives a set of templates, which generate configs for eight terminal apps. This site is
the ninth — app #9 of the theme engine.
colors.json 26-key schema · 57 variants templates/ .toml · .conf · .lua · .sh - Alacritty
- WezTerm
- Kitty
- tmux
- Starship
- Neovim
- bat
- delta
~/starikov app #9 — this site
The last mile of that pipeline runs live in your browser, too: in system mode
a matchMedia listener keeps the theme in step with macOS's own light/dark
switch in real time, no reload needed — the same auto-behavior the dotfiles apply in the
terminal, mirrored here.
Every variant
All 57 variants across 17 families, each swatch drawn in its own colors. 16 have a true light/dark web pair and recolor the whole site on click; the rest theme my terminal only.
Tokyo Night
4- Night terminal-only
- Moon terminal-only
GitHub
11- Light terminal-only
- Dark terminal-only
- Dark Dimmed terminal-only
- Dark High Contrast terminal-only
- Light High Contrast terminal-only
- Dark Colorblind terminal-only
- Light Colorblind terminal-only
- Dark Tritanopia terminal-only
- Light Tritanopia terminal-only
Catppuccin
4- Frappe terminal-only
- Macchiato terminal-only
Dracula
2- Classic terminal-only
- Soft terminal-only
One Dark Pro
5- Classic terminal-only
- Darker terminal-only
- Vivid terminal-only
- Flat terminal-only
- Vaporwave terminal-only
Material
5- Palenight terminal-only
- Oceanic terminal-only
- Deep Ocean terminal-only
Ayu
3- Mirage terminal-only
Monokai Pro
6- Pro terminal-only
- Classic terminal-only
- Machine terminal-only
- Octagon terminal-only
- Ristretto terminal-only
- Spectrum terminal-only
Night Owl
2Synthwave 84
1- Default terminal-only
Shades of Purple
1- Default terminal-only
Nord
1- Default terminal-only
Embark
1- Default terminal-only
Iceberg
2Monokai Classic
1- Default terminal-only
Aurora
1- Default terminal-only
Atom One
7- Dark Darker terminal-only
- Dark Cool terminal-only
- Dark Warm terminal-only
- Dark Warmer terminal-only
- Dark Deep terminal-only
Honest tokens
Terminal palettes are tuned for a terminal, not a document. Used naively as web text
they fail contrast — so this site splits them in two. The raw terminal
tokens (--bg, --fg, --accent,
--border, the sixteen ANSI colors) drive chrome only: borders,
fills, accents, the swatches above. --muted is never text — measured, it
lands at 1.8–2.5:1 across most variants, well under the readable floor.
The text colors are derived. At build,
--text-secondary and --code-comment are computed by mixing
color-mix(fg, bg) step by step until they clear the WCAG floors — 4.5:1 for
body-adjacent text, 3:1 for large and 14px+ mono. Body fg-on-bg
is validated at 4.5:1 for every variant, and any that fails is dropped from the build
rather than shipped with a color you can't read. There is no opacity on body text, ever.
This is disclosed here on purpose. It is the web sibling of my
validate-themes.sh — the contrast check that runs in the terminal, run
again at build for the browser. Authenticity through honesty: the colors are real, and
so is the math that makes them legible.
Type specimen
Two families do all the work: Inter for reading and UI, Commit Mono for identity — the wordmark, labels, code, and every terminal echo. No serif.
Inter Variable · body & UI
The quick brown fox jumps over the lazy dog — 0123456789
Commit Mono · identity
~/starikov ❯ theme storm && git commit -m "0O 1lI"
- Statement
- Heading 1
- Heading 2
- Heading 3
- Body
- Small
- Mono
The stack
- Astro 5
- Static HTML out, Content Layer in. Zero client framework — no React, no hydration tax.
- Vanilla TypeScript
- The ⌘K palette, the theme runtime, the pre-paint boot script — a few KB of hand-written TS, no islands.
- Pagefind
- Full-text search indexed at build, loaded on demand. The search runs in your browser, not a server.
- GitHub Actions + Pages
- One workflow: pull the live sources, generate the themes, build, gate, deploy. A failed build never ships.
- Inter + Commit Mono
- Self-hosted, subset to latin, preloaded. Metric-matched fallbacks so nothing shifts as they load.
Daily drivers
/uses and /craft fold in here rather than living as their own
pages — the hardware and terminal are already public on the
live profile card; the short version:
- OS
- macOS, Linux
- Editor
- Neovim
- Shell
- zsh, tmux
- Terminal
- WezTerm
- Keyboards
- Keychron Q10 Max (Alice, QMK) · CODE V3 87-Key (Cherry MX Clears)
The craft is the same doctrine as the pipeline above: pulled from live sources at every deploy, gated by tests and a strict build before anything ships, and themed from one engine rather than hand-tuned per page.
Provenance
The 8 curated families (16 live variants) are regenerated on every deploy. This build:
Palette synced from dotfiles@f274559 built 2026-08-09 09:58 UTC
One number on the System card isn't build-time data: editor cold-start (~150ms) was measured locally on 2026-07-26, not this build — there's no neovim on the build runner. Every other System card number (plugin count, dotfiles lines/files, theme variant/family counts) is computed fresh at build, same as the palette above.