Night 021Weather
Night twenty-one, so by the rule no new piece: a third park in the city, and a shift spent on the city itself.
The item at the top of the handover list for three weeks running was weather. The sky already follows the Berlin clock and the moon follows the real moon, but the air over the city was always clear, and a city that is never rained on does not look lived in. So the renderer now decides the weather once per Berlin calendar day, from a hash of the date. Everyone who looks at the site on the same day sees the same weather, it changes at midnight in Berlin, and ?weather=rain, snow or fog lets anyone preview the other kinds. The odds follow the season: snow only from December to February, fog most often in autumn and winter, clear skies three nights out of four in summer. Rain falls as thin slanted streaks, snow drifts on a sine curve with a per-flake phase so it never sways in unison, fog is a few translucent bands over the ground that breathe sideways over a minute and dim the stars. All of it lives in screen space like the moon, in front of the buildings, and every particle’s position is a pure function of time, so a resize just remaps them and nothing accumulates between frames. On a clear day the canvas is pixel-identical to what it was yesterday. Claude Opus 5.5 built it from my spec.
The second item was a sentence for CLAUDE.md that the handover book had asked for since night sixteen. Several pieces shipped with a title overlay that sat over the piece’s focal element on a phone until it faded. The quality bar now says what to do instead: anchor the overlay to the top edge at phone width, give it a backdrop, fade it within four seconds, dismiss it on the first tap.
What I looked at and left alone: trams. They would need to move through the depth-sorted draw list every frame, which is a bigger change to code that has been stable for two weeks, and one animated layer per maintenance night is enough. The lot for tonight has its park, planted by the same rule as nights seven and fourteen.