Guide · site 177 · wave 8, Form
How Monotile was made
Monotile presents the hat — the first single shape proven to tile the plane aperiodically — as a live workbench assembly. The audience is anyone who heard "a hobbyist solved a 60-year-old maths problem with scissors" and wants to see the shape actually do it. The page has one job: make you watch aperiodic order grow, tile by tile, and believe it's real — because it is. The assembly is generated in-page by the substitution system from the 2023 proof, not by a decorative approximation.
01 · Palette
Card stock on a dark workbench
The story is a kitchen-table discovery — paper, scissors, pencil — so the palette is literal: pale card tiles laid on a slate bench, annotated in pencil grey, with the rare mirror-flipped hats flagged in a marker coral. Four near-identical paper tones keep a field of 400 identical shapes from reading as flat wallpaper; the eye registers cut card, not vector fill.
02 · Type
Karla + Fragment Mono
One shape. No repeats.
Karla 300–800 · display & body
tiles 259 · reflected 34
Fragment Mono · tallies, labels, edges
Karla is a grotesque with visible hand-drawn quirk — the right voice for a proof that began with scissors rather than a supercomputer. At weight 800 with tight tracking it gives the three-beat headline its certainty; at 400 it stays warm for long copy. Fragment Mono does the measuring: the live tally, section numbers, edge lengths (1 and √3), figure captions — every place the page behaves like a lab notebook rather than a poster. Uppercase mono with .2–.3em tracking is the annotation register; it never sets sentences.
03 · Techniques
The real substitution system, in SVG
The signature element is honest. The hero runs the actual H/T/P/F metatile machinery
from Smith, Myers, Kaplan & Goodman-Strauss (2023). Four base metatiles (H holds four hats,
one reflected; T one; P and F two each) are combined by a 28-rule patch — each rule welds a new
metatile edge-to-edge onto the patch using an affine matchTwo transform that maps
one segment onto another. From that patch the code derives the next generation's four supertiles
and recurses three levels, yielding a few thousand hats of guaranteed-aperiodic tiling; the
~400 inside the viewport survive a cull.
Every hat is one SVG <use href="#hat"> under a matrix()
transform — the 13-gon path is defined once and stamped hundreds of times, so the whole field
costs one path definition. Reflection is read straight off the maths: a negative transform
determinant means the hat is mirrored, and that test alone decides which tiles wear coral. The
φ⁴ : 1 ratio in the copy isn't asserted by the code — it emerges from the substitution,
and the live counter keeps checking it in public.
The assembly engine sorts surviving hats radially from the seed (with deterministic jitter,
seed 177) and snaps them in on a build → hold → clear → rest cycle, so the patch is forever
mid-assembly — a designed resting state that reads at a 7-second thumbnail. Placement flips a
class; a scale(1.28)→1 keyframe with an overshoot bezier gives each tile its snap.
Second-order supertile outlines are kept as dashed pencil paths that fade in on a cycle, and
pointer position (mapped through the slice viewBox maths) picks out the cluster
under the cursor. A faint kite lattice behind everything is drawn once and aligned by inverting
the seed tile's transform — every hat is an isometry of that one shared grid, which is the
quiet visual proof of the polykite section.
No libraries. The page is one HTML file: vanilla JS builds the geometry (~120 lines of matrix
code), the DOM is SVG, the motion is CSS. Reduced-motion gets a settled mid-assembly frame with
the cycle stopped; the rAF loop idles while the tab is hidden; resize costs nothing because the
viewBox owns all scaling.
04 · Iteration log
Three passes
-
Pass 1
CraftThe tiling was mathematically right but the copy sat on top of it unprotected: the eyebrow line and the live tally were near-illegible wherever paper tiles ran beneath them (worst at 375px, where the tally moves to the top of the frame). Gave the tally a slate panel with a hairline border and blur, promoted the eyebrow from dim grey to full pencil ink, and added deep text-shadows to the hero stack. Lifted every quiet label — section numbers, captions, the colophon — one ink step, from 3.4:1 to 5.4:1 against the slate.
-
Pass 2
DepthTwo second-read details. Hovering the field now picks out the completed second-order supertile nearest the cursor and names it in the tally (H² · 22 tiles), holding it against the ambient cycle for five seconds — the hierarchy of the proof becomes something you can point at. And the reflected counter ticks from paper to coral each time a mirrored hat snaps in, tying the rarest event on the page to its own statistic. Snap overshoot tuned to
cubic-bezier(.16,.95,.3,1.18)so tiles land like pressed card, not bouncing rubber. -
Pass 3
Hardening375px: tally repositioned under the header with tighter padding, scroll cue dropped, headline reclamped. Reduced-motion verified end-to-end — no snap animation, no cluster fades, state reads "Settled" with a few hundred tiles already down. Confirmed zero console errors headlessly, one h1 per page, the placed-tile tally advancing live (253 → 256 → 259 over 3s), and pixel-diff liveness on two frames 1.3s apart. Removed a planned per-tile rotation shimmer — the assembly is the ornament (Chanel rule).