Field notes · Generative Assets · site 205

Arecibo — a semiprime as a key

In 1974 we aimed 1,679 bits at a star cluster and hoped an unknown mind would notice the number could only be folded one way. This is how we rebuilt that gamble in three dimensions.

The concept

Arecibo reconstructs the real 1974 message — 1,679 bits, transmitted from the Arecibo Observatory toward the globular cluster M13 — as a single line of instanced cubes flying into the dark. The page is for anyone who likes the idea that a picture can be hidden inside a prime. Its one job: to make you feel the decode. The stream is meaningless until you notice that 1,679 = 73 × 23, a semiprime with no other honest factoring, and fold it at exactly 23 wide.

Every bit on screen is the genuine transmission (397 ones, 1,282 zeros), stored as a 420-character hex string and unpacked at load. Fold it at the wrong width and you get honest noise — the same bits, no cheating. Fold it at 23 × 73 and the numbers, the atoms of life, the DNA double helix, a human, the Solar System, and the dish itself resolve out of the grid.

Palette — argued from the transmission

Deep space
#070B14
The void the signal crosses. Near-black, faintly blue, so cube glow reads as light, not paint.
Starlight silver
#C7D3E0
The structural figures — helix, human, dish. Cool, instrument-panel white.
Hydrogen crimson
#D14A6A · line/mark
The 21 cm hydrogen line the message uses as its yardstick. Reserved for the signal and the human.
Plaque gold
#B08A4F
The chemistry rows — atomic numbers and nucleotides. The colour of a message meant to last.
Body ink
#C2CDDB / #8593a8
Derived from silver and dimmed for copy — crimson is a mark colour and fails 4.5:1 as text, so it never sets prose.

The crimson is treated strictly as a line/mark colour — it lights bits and the reveal cursor, never body text. Copy runs in a silver-derived ink so every label clears the 4.5:1 contrast floor.

Type

Space Grotesk carries the display voice — a technical grotesque with just enough character to feel like a mission decal rather than a system font. JetBrains Mono handles every number: the HUD readout, the row annotations, the fold arithmetic. Monospace here is not decoration — the message is a count, and the counters need to line up.

The signature — prime factorisation as the only key

The scene is built in React Three Fiber (loaded through an ES-module importmap, no build step, markup written as htm tagged templates instead of JSX). All 1,679 bits are one drei <Instances> mesh — a single geometry, a single draw call, 1,679 instanced transforms and colours updated per frame.

The fold is a morph, not a cut. Each frame every cube eases toward its target position in the currently selected grid — position.lerp(target, 1 − e^(−3.6·dt)) — so switching width sends the whole stream flying into a new rectangle. At the wrong width the lit bits scatter; at 23 × 73 they land on the historical figures. A camera then glides down the 73-row column while a reveal cursor lights each row band in turn — numbers, then chemistry, then the helix, then the human, then the dish — with the annotation rail tracking the sweep.

Glow is deliberately bloom-free: a meshBasicMaterial with toneMapped=false and colours pushed past 1.0, so bright bits read as emissive on the dark ground without a post-processing pass. A per-bit twinkle keeps the resolved picture alive. Behind it all, a 1,300-point starfield gives the void depth.

The HUD does the arguing. Its folded at line is computed live: 24 leaves a grid of 24 × 70 with 1 empty cell, 40 gives 40 × 42 with 1 spare, 51 gives 51 × 33 with 4 spare — none tile. Only 23 × 73 reads exact. That is the whole point of a semiprime, shown rather than claimed.

Every number on this page, verified against the code

Iteration log

Pass 1 · Craft

The hero copy sits over the moving cube field, so the sub-heading was dropping below contrast against gold and silver bits. Deepened the header scrim to a four-stop gradient and added a dark text-shadow to the hero copy so it clears the field. Confirmed the page carries exactly one real <h1> (visually hidden) beneath the styled display title, and that annotations, HUD, and control states all read at the intended hierarchy.

Pass 2 · Depth

The site claimed 23 × 73 was special; it should prove it. Rewired the HUD's folded at line to compute the grid and leftover cells for whichever width is selected — the wrong widths visibly fail to tile (1, 1, and 4 stray cells), only 23 × 73 comes up exact. A viewer who tests the buttons discovers the maths themselves. Kept the per-bit twinkle as the second-read detail that keeps a settled picture breathing.

Pass 3 · Hardening

Rebuilt the reduced-motion path: instead of a half-dim frame it now paints the fully-resolved 23 × 73 pictogram once, pulled back to frame the whole message, and then holds — no glide, no twinkle, frame counter frozen at 1. Verified 375 px has zero overflow offenders, DPR capped at 2, resize handled, the render loop paused on document.hidden, and a three-stage fallback chain (R3F → vanilla three.js → a static CSS bit-grid) so the message is never a blank canvas. Headless Chrome confirms the importmap resolves with zero console errors and the instance count is exactly 1,679.