system
400.wtf

400.wtf / system / docs · docs/ADR/0016-black-hole-as-a-station.md

ADR-0016 — The black hole as a station (Estação Fim da Linha)

Status: Accepted (2026-10-10). Supersedes ADR-0002 for the site.

Context

The black hole was the original 400.wtf: a persistent full-page background that survived every navigation (ADR-0002). The civic redesign parked it in packages/black-hole (plan §6) because a 300k-particle dark backdrop behind daylight editorial pages contradicted the new identity and its performance budget.

Decision

  • Bring the engine back as a station: Estação Fim da Linha, “the end of the line”, on the red line (category rendering), full-bleed on the night surface. Not a background anymore.
  • Keep the original engine: time-driven (uTime) spin, as committed. The experimental steady-state rework left uncommitted in the old checkout was tried and rejected: the original reads better as a station.
  • Engine additions: a configurable palette (raw RGB uniforms, so values match the original shader constants), a yaw argument to orbit the camera, a timeOffset (start further along the clock), and dispose().
  • Interaction, scoped to the stage: the stage is tall (stageHeight: 160svh) and the view pins under the header while it passes; the camera dive maps onto that pinned stretch and continues past the disk’s plane to look at it from underneath (offset 0 → 1.6, minTarget below zero). Drag turns; a click spins with inertia; ←/→ when focused (prevents the page’s station nav). ArtifactFrame clips with overflow: clip so sticky works inside it.
  • Palette from DS tokens: --ds-action on night (lifted transit blue) far out, signal yellow at the horizon, a paper rim.
  • Cost control: renders only while intersecting and the tab is visible; low tier (100k particles, DPR 1.5) on coarse pointers or ≤4 GB memory; reduced motion holds a settled frame (60 s into the clock); ?og-capture too.
  • pnpm og launches Chromium with software WebGL so the station’s share image and preview can be captured headless.

Consequences

  • The persistent-runtime code (usePersistentBlackHole.ts, BlackHole.vue) stays in the package for reference but is unused by the site.
  • The disk forms from nothing, like the original background. The clock starts on the first rendered frame, which is when the stage first comes into view.