Colophon
How this site is built. The parts are inspectable; this is the index.
Stack
Astro 5 deployed on Vercel. Pages are static HTML; JavaScript ships only where a page earns it. React renders exactly one island, the LexiGraph explorer. Everything else is vanilla CSS and plain script tags, with GSAP, Three.js, p5, and D3 doing the visual work in the lab.
Type
Three families, self-hosted, subsetted to the glyphs the site actually uses and served as woff2. The full faces weigh 1.27 MB; what ships is 157 KB.
- Inter Body and interface
- Instrument Serif Headings, regular and italic
- Noto Sans Ethiopic Fidel text, loaded only where it appears
-
--text-2xs0.7rem -
--text-xs0.75rem -
--text-sm0.85rem -
--text-base1rem -
--text-md1.1rem -
--text-lg1.5rem -
--display-1clamp(2.5rem, 6vw, 4rem) -
--display-2clamp(1.75rem, 3.5vw, 2.5rem)
Color
Six tokens. All text on the base background clears WCAG AA contrast.
-
--black#08090cBackground -
--white#edf0f5Text -
--gray-dark#1a1c22Borders -
--gray-mid#747b8bLabels, meta -
--gray-light#c2c7d1Secondary text -
--accent#8a96a8Active states
Status
Project state. Hues desaturated to sit inside the palette, never to glow.
-
--status-live#5da777Shipped, in users’ hands -
--status-beta#b0a36bBeta -
--status-wip#6c87a8In progress -
--status-neutral#747b8bArchived, paused
Spacing
A 4px base scale. The page gutter collapses from 2.5rem to 1.25rem at 768px.
-
--space-1 -
--space-2 -
--space-3 -
--space-4 -
--space-5 -
--space-6 -
--space-8 -
--space-10 -
--space-12 -
--space-16 -
--space-20
Motion
Quiet by default. Four durations, one primary curve, and motion that respects
prefers-reduced-motion everywhere it appears.
-
--duration-10.2s -
--duration-20.3s -
--duration-30.5s -
--duration-40.8s -
--ease-out-expocubic-bezier(0.16, 1, 0.3, 1)
Content
Writing lives in Astro content collections: long-form essays under date-stamped routes, short-form notes in the stream. Posts can belong to a series and pick up navigation automatically. Social cards are generated per post at build time.
Rules
A post is public only when it is neither a draft nor protected. One function enforces that everywhere a post can surface: list pages, static routes, social card generation, and the RSS feed. Tests guard the rule. If a project is not inspectable, it does not get a public link.
The tokens on this page render from the same manifest the unit tests check against the stylesheet, so this index cannot drift from the system it documents.