Framework
Astro
Content-first pages, static output, and small client-side islands when the interface calls for them.
Colophon
A quiet inventory of the tools, type, performance choices, accessibility details, and publishing decisions behind this website.
Astro
Fast static pages with content collections.
MDX
Long-form writing with components when needed.
Vue
Small islands for interactive surfaces only.
This site is built to stay lightweight, legible, and easy to maintain. Static pages carry most of the work, with interactive islands reserved for places where they make browsing meaningfully better.
Framework
Content-first pages, static output, and small client-side islands when the interface calls for them.
Interface
Utility classes handle layout and rhythm, with a small global layer for site tokens and reusable text treatments.
Type
Inter carries UI and prose; JetBrains Mono handles code, labels, eyebrows, and metadata.
Search
Local search is generated at build time, keeping the archive searchable without a hosted search service.
Editor
The site is written and maintained in Zed, with formatting and build checks keeping the workspace consistent.
Images
Open graph images are generated from SVG sources, while portfolio images are served as local static assets with modern formats where available.
Design
How reading rhythm and theme tokens stay consistent across notes, lists, and interface surfaces.
Typography
Inter · JetBrains Mono
Inter is self-hosted fromsrc/assets/fonts through the Astro Fonts API as a Latin-focused variable WOFF2 subset. The normal face is preloaded; italic loads on demand. OpenType features include standard ligatures, contextual alternates, and slashed zeros, with font-optical-sizing: auto. Body and UI text keep normal letter spacing; headings tighten on a small tracking scale (-0.006em to -0.02em) as sizes grow, following Inter's dynamic metrics.
JetBrains Mono covers inline code, code blocks, timestamps, labels, eyebrows, and category tags at 13px with tabular figures and slashed zeros. iOS falls back to static Inter TTF cuts when variable fonts are unreliable.
MDX articles use the .prose-site scale: 17px body copy at 1.75 line height, capped near 68 characters. Headings stay semibold and compact — page titles scale up totext-6xl, section headings sit around text-2xl totext-4xl, and eyebrows are uppercase mono labels with a cyan-to-magenta gradient.
--leading-golden-heading: 1.382Uppercase eyebrow label
Color
--color-* · light and dark
Colors live as CSS custom properties in src/styles/global.css. ink and paper anchor primary text and page backgrounds; surface lifts cards and inputs; muted, soft, and faint step supporting copy from body text down to dates and metadata.
cyan is the primary interaction color — links, selected topic filters, primary-button hovers, and scrollbars. magenta is editorial: blockquote borders and eyebrow accents. blue and violet handle quieter structural moments; electric-cyan and electric-magenta appear in gradients, the favicon, and the soft radial glows behind the page.
Light, dark, and system modes resolve before paint via an inline script inBaseLayout.astro, stored in localStorage assite-theme. Hex and rgba values are the baseline; browsers on wide-gamut P3 displays get OKLCH overrides. Text selection inverts the ink/paper pairing so highlighted copy stays readable in both modes.
inkprimary textpaperpage backgroundsurfacecards, panelsmutedbody copysoftsecondary textfaintmetadatalinehairline borders, transparentquiethover wash, transparentcyanlinks, focusbluestructural accentviolethighlight accentmagentaeditorial accentelectric-cyanglow only, not textperiwinkle-violetglow only, not textelectric-magentaglow only, not textdisableddisabled controls