# UX - Copper Field - Iteration Log A running log of the interactive background behind this site: what each iteration tried, what it taught, where it went. Live code sits in publish.js and publish.css under the Copper Field headers. Newest first. Related: [[08.26.26 - The Copper Field - Growing Metal Grass on a Website|the build entry]] and [[Thesis - Ship Probes, Not Monoliths]]. **v5 - Off the main thread (10.08):** Firefox still stuttered while a gust crossed. Each frame redrew thousands of blades, up to 35 ms of work on the page's own thread, and scrolling, hovering, and the word cards waited behind it. The field now draws in a worker on an OffscreenCanvas in Chromium and Firefox, and the page only passes along the pointer, the window size, and where the reading column sits. Same engine, same values, same look. Where a worker is missing or blocked, and under reduced motion, the engine runs on the page as before. During a gust in Firefox the page now holds sixty frames a second with no late frames, against fifty with one in five late. The grass itself still dips into the thirties mid-gust in Firefox, since drawing is drawing; it no longer takes the page with it. **v4.5 - The sleeping field (10.08):** The engineering pass promised a field that sleeps, and a headless browser timing every frame found that it never did. The loop walked every blade sixty times a second with nothing moving. Now it stops and wakes for the next gust, the cursor, or a recompose. A phone toolbar sliding away during a scroll no longer rebuilds the meadow, and a touch the browser cancels for a scroll lets the grass go instead of holding a phantom finger. The word cards dropped a backdrop blur that every browser redid each frame the field moved behind them, and Firefox's Words page went from thirty-one frames a second to sixty. **v4.4 - Shipped (08.30):** The v4 curved engine replaced v3 in publish.js with the settled values baked in and no dials; the whole surface family in publish.css stepped a notch darker to match the ground. Recomposition is event driven and chunked, which keeps scrolling and idling free. The meadow rests, and the cursor moves through it like a hand at grass height. **v4.3 - Converged (08.30):** Curved wins. Spacing 10, height 1.1, lean 0.28, opacity 0.19, sheen 0.7, gusts every ~9s at 230 px/s with band 135, gust sheen 0.55, gust lean 0.14, mouse radius 40 at strength 0.45, calm 0.45, ground down to #111010. **v4.2 - The blade itself (08.30):** The tapered dash reads as a scratch, and this corner is studied: game grass builds every blade as a curved ribbon (curvature and tip curl say "blade"), painters add a shaded root and a lit tip, or crossing strokes. Built four switchable styles: Dashes, Curved, Layered, Crossed. **v4.1 - Weather with terrain (08.30):** Rolling hills (slopes toward the light brighten, crests lengthen), ragged gust fronts that wander a few degrees per gust, blades that bend rather than stretch, and one satisfying find: the hard band edge and the mouse's perfect circle were the same bug, overlay copies snapping in at a threshold instead of fading. Boundary artifacts were architecture. **v4 - Upright field (08.30):** Standing grass from overhead foreshortens to short, near-uniform marks. The field is still at rest; weather arrives as an occasional gust from the upper left, a soft band that bends blades and carries a copper sheen. Idle cost drops to nearly nothing. Verdict: better, with a fix list. **v3 - Combed clumps (08.29):** Blades side by side across a lay direction, arc-scattered roots, whorl flow field, full-resolution rendering after finding a quiet pixel-ratio cap on large windows, ground desaturated toward black. Flowing and organic, and it went live. The critique that ended it: full-length sideways strokes are what wind-flattened grass looks like. **v2.5 - The engineering pass (08.27):** Same look, rebuilt renderer: idle field composed in chunks offscreen, only disturbed blades redrawn per frame. Fixed a trailing halo (a stale cursor-shaped exclusion) and a twitch (snapping deflection angles). Seventeen frames a second became sixty. Dials later removed; defined defaults ship instead. **v2 - Point tufts (08.26):** Three to five tapered blades fanning from shared points, dark ground locked in, tuning dials shipped behind a chip. Approved and shipped; at higher density the radial fans read as urchins. Lessons: clumping makes vegetation read as vegetation, and the dark ground won on sight. **v1 - Scattered strands (08.26):** Evenly spaced curved strokes on warm paper. Read as body hair at any useful density. Killed the same night. Lesson: density does not fix structure.