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 63 KB
  • Instrument Serif Headings, regular and italic 48 KB
  • Noto Sans Ethiopic Fidel text, loaded only where it appears 46 KB
  • --text-2xs 0.7rem Labels
  • --text-xs 0.75rem Meta
  • --text-sm 0.85rem Small body
  • --text-base 1rem Body
  • --text-md 1.1rem Lead
  • --text-lg 1.5rem Card titles
  • --display-1 clamp(2.5rem, 6vw, 4rem) Page headings
  • --display-2 clamp(1.75rem, 3.5vw, 2.5rem) Section headings

Color

Six tokens. All text on the base background clears WCAG AA contrast.

  • --black #08090c Background
  • --white #edf0f5 Text
  • --gray-dark #1a1c22 Borders
  • --gray-mid #747b8b Labels, meta
  • --gray-light #c2c7d1 Secondary text
  • --accent #8a96a8 Active states

Status

Project state. Hues desaturated to sit inside the palette, never to glow.

  • --status-live #5da777 Shipped, in users’ hands
  • --status-beta #b0a36b Beta
  • --status-wip #6c87a8 In progress
  • --status-neutral #747b8b Archived, paused

Spacing

A 4px base scale. The page gutter collapses from 2.5rem to 1.25rem at 768px.

  • --space-1 4px
  • --space-2 8px
  • --space-3 12px
  • --space-4 16px
  • --space-5 20px
  • --space-6 24px
  • --space-8 32px
  • --space-10 40px
  • --space-12 48px
  • --space-16 64px
  • --space-20 80px

Motion

Quiet by default. Four durations, one primary curve, and motion that respects prefers-reduced-motion everywhere it appears.

  • --duration-1 0.2s Micro
  • --duration-2 0.3s Hover
  • --duration-3 0.5s Reveal
  • --duration-4 0.8s Set-piece
  • --ease-out-expo cubic-bezier(0.16, 1, 0.3, 1) Primary easing

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.