# The Copper Field - Growing Metal Grass on a Website **The idea:** I wanted the site's background to be a field of metallic grass, seen from above, that parts around your cursor the way tall grass parts around a hand. Subtle enough to ignore, alive enough to notice. Burnished copper on a dark ground, because the dark version won the moment I saw it. **The back and forth:** The first draft scattered short curved strokes evenly across the page. At low spacing it read, and I said this out loud, pubic. Turns out the fix wasn't density, it was structure: real grass grows in tufts. Clusters of three to five longer blades that taper to a point and share a lay direction, sweeping in slow whorls like combed metal. Clumping is what makes vegetation read as vegetation. **The performance problem:** Ten thousand blades redrawn every frame chugged on the live site even when the preview flew. The rework splits the meadow into layers: the idle field is composed a strip at a time into an offscreen buffer, and only the grass near your cursor is redrawn live. The meadow is mostly a photograph that repaints itself in strips; only the blades you touch are awake. Seventeen frames a second became sixty in the worst-case test. **The bug:** A ghostly empty halo trailed the cursor. The compose pass was cutting a cursor-shaped hole out of the buffer, and the hole always lagged one cycle behind the mouse. The fix was to only leave out blades that are actually bent, and let the live layer fill in whatever the buffer lacks. Rendering bugs are honest like that, the artifact points straight at the architecture. **The dials question:** For a day the site shipped with a "field" chip that opened sliders, and anyone could retune the meadow. I liked it and pulled it anyway. Exposing the knobs is fun, but the site should present a decision, not a settings page. The dials live on in the workshop copy, and one flag in publish.js brings them back if I change my mind. **Locked in:** spacing 22, blade length 0.8, opacity 0.16, breeze 0.16 at speed 0.95, radius 130, part strength 0.25, settle 10, sheen 0.55, calm zone 0.45. The [[Synthetic Site Health|synthetic monitor]] verified the deploy the same night, which closes a loop I started in [[01.24.26 - Personal Reliability Engineering - Synthetics, Playwright, Automated Testing|the reliability entry]]: the robot that checks my garden watched me replant it.