The Central Limit Theorem, staged on a chalkboard — three chaoses, one bell.
Draw once and you get a wild card. Average a handful and you get a tamed one — and the tamed ones, from any source at all, always pile into the same bell.
CONVERGE is a lecture-hall demonstration of the Central Limit Theorem. Three lanes each draw from a wildly different source — a flat uniform, a hard-skewed exponential, a split bimodal — and instead of plotting single draws, each keeps only the mean of a small sample of size n and pours that number into its histogram. Whatever the source shape, all three histograms settle onto the identical Gaussian drawn in amber overhead. Its audience is anyone who has been told the bell curve is "natural" and wants to watch why it is inevitable. The page's single job: make the order on the far side of the noise impossible to unsee.
A chalkboard, argued from the subject: this is a thing you'd prove at the front of a room. Green slate, chalk-white ink, one mint for the random marks and one amber for the law they converge to.
Spectral is the display face: a workhorse serif with the measured, textbook cadence of something set to be read aloud from a lectern. JetBrains Mono carries every number — the sample size, the running counts, the measured μ̂ and σ̂ — because the argument is quantitative and the figures should line up like a proof.
Everything is one canvas 2D scene; no libraries. The trick that makes all three lanes converge to the same curve is standardisation. Each source is generated raw, then every sample-mean is mapped to a common centre (μ = 0.5) and spread (σ₀ = 0.15) using the source's own mean and variance:
A sample-mean of size n then lands with mean ½ and standard deviation σ₀/√n — a value that no longer depends on which ugly source it came from. That is why the amber overlay is byte-for-byte identical in every lane, and why raising n shrinks its width by exactly 1/√n. Set the sample size to 1 and the mapping passes the raw source straight through, so each histogram snaps back to its own face — flat, skewed, split — and the shared bell visibly fails to fit. That before/after is the whole theorem in one control.
Sample-means pour in as falling marks that accelerate under a small gravity and commit to a histogram bin on landing; a faint ±1σ core band behind each bell narrows as you raise n, making the 1/√n law spatial. At rest the lanes are pre-seeded with thousands of means so the thumbnail already reads as three matched bells.
The per-lane μ̂/σ̂ readouts and the bottom "hint" both collided with the corner HUD and the controls — badly on mobile, where the readout ran straight under the sample-size buttons. Moved the measured stats to the clear top-right of each plot, dropped the hint into the empty bottom-centre band, hid the global HUD on narrow screens (the per-lane σ̂ already proves convergence), and centred the controls. Softened the source-ghost outline.
Enriched the signature with a faint ±1σ core band and baseline ticks that visibly contract as n rises — the 1/√n law you can measure with your eye. Added a shared amber peak dot to underline that the three curves are one curve, and gave the falling means a gentle gravity so the pour reads as physical, not a blink.
Verified 375px (no overflow; nav and wordmark inside the box), the reduced-motion settled frame (two frames 1.3s apart hash-identical, zero console errors), focus-visible rings, and DPR/resize relayout. Applied the Chanel rule: removed the dashed source-ghost behind each histogram — it duplicated the source glyph already drawn at the top of every lane and left a stray box under the uniform. The plot breathes, and the n=1 reveal carries the "what was the source" job on its own.