OORT treats astronomy as devotion rather than discovery: a forty-year communal watch for a fictional comet whose last secure appearance was recorded in 1608.
The interface borrows the red-light etiquette of an observatory, the duration of a photographic exposure, and the measured cadence of a psalter. Visitors do not merely read about patience. By staying, they lengthen the sky’s star trails. Every visual is code—canvas, SVG, CSS gradients, borders, grain, and type. The Nocturne Wing supplies no generated assets; that constraint became the central instrument.
01 — SignatureThe exposure remembers
The fixed #exposure canvas is driven by drawExposure() in main.js. A seeded field is arranged around a celestial pole below the viewport. Each star is redrawn as an arc whose length grows logarithmically with elapsed seconds, so a short visit registers immediately while a long vigil still has room to deepen.
persist() saves elapsed time, seed, and start date to local storage on visibilitychange and pagehide. This guide’s drawGuideExposure() in guide.js reconstructs that same field above. The main animation cancels its frame loop while hidden; reduced-motion mode renders a single stable plate.
The Pass 3 witness plate adds a deliberate act of attention. stepWitness() measures a 1.8-second pointer or keyboard hold, brightens the same canvas while the shutter is open, then stores a UTC witness mark. Its message records absence rather than discovery: the field was held, and Vesper remains in transit.
02 — Orbital imageTwo tails, truly parted
The approach instrument is inline SVG. updateComet() reads scroll progress, moves the nucleus, and rewrites six path strings. The ion tail remains a straight anti-sunward vector. The dust tail uses cubic Bézier controls that bend farther along the remembered orbit as perihelion approaches. Distance, year, divergence angle, and the progress rule update from that same value, keeping the display coherent.
Crisp paths sit above separate blurred glow paths. The defocus lab uses a native range input; its handler changes diameter, blur, opacity, confidence, and the estimated magnitude rather than offering motion without meaning.
03 — PaletteDark-adapted color
Deep-space black is not a flat fill: low-energy cyan and amber radial fields create atmosphere without lifting the whole page. Ion cyan belongs to geometry and live values. Dust white carries reading text and the curved particulate tail. Red-light amber marks instructions, dates, and actions. Glow is reserved for emitted light; borders and text stay crisp.
#020506
#69EAFF
#FFF7E9
#FF755C
04 — Type & rhythmInstrument / ledger
Michroma sets monumental headings, values, and instrument labels. Its extended shapes make time feel engineered, but it is kept away from long reading. Space Mono carries coordinates, methods, and inherited field notes. Tiny captions were raised to a legible floor in Pass 2; hierarchy now comes from role, spacing, and color instead of miniature type. Asymmetric desktop grids collapse into a continuous phone ledger without losing sequence.
05 — Reproduce thisPrompt for patience
Build a code-only nocturnal observatory about waiting decades for a fictional comet. Make the visitor’s elapsed time materially lengthen a persistent seeded canvas of star trails. Pair it with a scroll-driven SVG whose straight ion tail and curved dust tail change independently, an inherited field ledger, a precise ephemeris, and a range-controlled magnitude instrument. Use self-hosted technical type, dark-adapted cyan and red-light amber, one shutter-opening load moment, strong focus states, and a static reduced-motion plate. Let duration—not downloaded imagery—be the spectacle.
No photographs. No generated assets. Light is the material.