Radar Easter eggs — first batch
Three hidden extras for the 3D tech radar, each a real architecture idea. They add delight without touching the radar’s data, layout or labels.
Ground rules (all eggs)
- One pure module,
src/radar/easter.ts. Each egg is a trigger read from the Model and turned into extra scene nodes, whichsceneForappends after the labels. No egg changespositionsOf, filters, placement or the dataset. - Out of the way. Eggs live beyond the outer shell (radius > 3.3), never take part in label placement, and are never placement obstacles.
- Render on demand. An egg animates only while it is shown. Under reduced motion it appears in its final pose, with no ascent, spin or drift.
- Literal unions, not booleans, for egg state (the lint policy), and
Matchfor branching.
1. The abduction — Strangler Fig (timeline)
When the shown edition has an entry that left the radar since the edition before, a flying saucer hovers over that entry’s old position, with a faint light beam down to it.
- Saucer: a flattened sphere and a torus rim, standard metal; the beam is a
basic, translucent, depth-test-off cone. - Data: a new pure
departuresIn(model, index)returns the ids that left, with their previous ring, so their positions come from the earlier edition.changesInkeeps its wording but is built on the same helper.
- Motion: while the timeline plays, a ghost of the departed blip rises up the beam,
driven by
playClock / playStep, so it is deterministic and frame-stepped like playback.- When the timeline is scrubbed or paused, the ghost waits at the bottom of the beam.
- Under reduced motion there is no ascent.
- Readout: hovering the saucer says “Strangler Fig:
was replaced, bit by bit, and left the radar”. - Fixture: add one departure to an illustrative edition (an entry present in the second
edition and absent from the third), so the egg can be seen in the demo.
- The decoder already validates
absentids.
- The decoder already validates
2. The Monolith — monolith vs microservices (universe view)
In the universe view, a black slab hangs just beyond the Caution shell, inside the frame, in proportion 1 : 4 : 9 (the film’s ratio).
- Click it: it shatters into 24 small cubes (
instances) that ease out to a loose orbit and slowly turn round it as microservices. - Click again: they ease back into the slab.
- Readout on hover:
- whole: “A monolith. Click to decompose.”
- shattered: “Microservices. Click to put the distributed monolith back together.”
- Model:
monolith: 'whole' | 'shattered'and one new Message,ClickedMonolith, routed fromclickedAtby key (like category labels). - When it shows: only when
isBirdsEye(camera)(or when summoned, see 3), so the side view stays clean. - Motion: the orbit spins only while shattered and shown; under reduced motion the cubes sit still.
3. Search eggs — magic words
A word typed into search that names an egg summons it. These words match no entries, so the
radar is not filtered: they are passed over by filtersOf, and the radar stays full behind
the egg.
| Word | Effect |
|---|---|
monolith | The Monolith appears from any view, whole. |
microservices | The Monolith appears already shattered. |
42 | The readout: “Deep Thought has computed the answer. The question is still being worked on.” |
cobol | A Voyager-style probe drifts slowly across the far sky: still running, very far away. |
- Matching: a pure
summoned(query)returns anOptionof the egg. It is case-insensitive and trimmed, and matches whole words only. kafka(a comet of messages along the “Builds on” edges) is left for a later batch; it needs its own frame loop.
Tests (bun:test, pure)
- Departures:
departuresInlists exactly the entries absent now but present before, and none for the first edition.changesInstill reads as it does today.
- Saucer:
- The scene has a saucer node only in an edition with a departure, positioned above the departed entry’s previous blip.
- The ghost’s height grows with
playClockand is fixed under reduced motion.
- Monolith:
- Present only from above, or when summoned.
ClickedMonolithtoggleswholeandshattered.- All 24 cubes sit outside the outer shell, inside the universe view’s frame, and clear of every blip.
- Search:
summonedmaps each word, ignores case and spaces, and rejects partial matches (monoliths).- Magic words leave
visibleOfunchanged.
- Sanity:
- No egg node key starts with
blip:orlabel:, so placement and hover never see them. needsFrameis false with no egg animating.
- No egg node key starts with
Delivery
- Branch
feat/radar-easter-eggs, one commit per egg (abduction, monolith, search words), one PR. - Verified with the full test suite, typecheck,
bun run checkand a Chromium pass at desktop and 375px, including reduced motion. - Commit locally; push and open the PR only when asked.
Second batch (built on the same branch)
The rest of the list landed on feat/radar-easter-eggs too, one commit each, under the
same ground rules.
| Egg | Trigger | What it does |
|---|---|---|
| Fallacies of distributed computing | Hovering a saucer | Each visit reads the next of the eight fallacies after the Strangler Fig line, round all eight. |
CAP moons (capMoons.ts) | Close to Local-first sync | Three white moons on a wider orbit. One is always gone (chosen by the camera’s bearing, a third of the way round each), so you never see all three. Hovering them names the two this side keeps. |
Constellations (constellations.ts) | Standing within 8° of a vantage | Hexagonal architecture, layered architecture and the C4 model. Stars sit 34 to 70 units along rays from the vantage, so they line up only there, in the corner the radar leaves empty. They brighten, join and are named in the readout. The hexagon is five presses of Turn from home; the others need dragging. |
Conway’s Law invaders (invaders.ts) | The Konami code, outside text fields | Four ranks of an original 9 × 7 pixel alien, one rank per category, march in steps in front of the radar for 14 seconds. They hold still under reduced motion. |
The Kafka comet (comet.ts) | Searching for kafka | A comet of messages rides each visible “Builds on” edge in turn, from foundation to builder. It holds still under reduced motion. |
Egg readouts are a list of readers. Their order is: the egg under the pointer, then the invasion, then a lined-up constellation, then a magic word’s answer.