A weather card splits into before and after: a chart you had to read on the left, a one-line rain answer on the right, framed by a red triangle, yellow circle, and blue square.
toolsJune 7, 20265 min read
By

Will it rain? The family weather board learned to just say so

The weather board at /weather used to make you read an hourly chart to find out whether it would rain. Now it answers in a sentence — timing, chance, and the day's total, each shown once. Plus: a fair before-and-after held the forecast still and changed only the code, and became the first thing I've ever animated on this site, in nothing but the Bauhaus kit.

My family's weather lives at /weather: four homes on one board — ours outside Chicago, my mom's up in Door County, my brother's clan in Texas, my grandparents downstate — in big, senior-friendly type. It answered every question except the one everyone actually asks out loud. Is it going to rain, and when? You could get there, but only by reading an hourly chart and squinting at a row of percentage bars. This week it learned to just say so. And building the before-and-after for this post turned into the first time I've ever animated anything on this site, so there's a second story stacked under the first.

Same forecast, two answers — rendered frame by frame with the site's own Bauhaus kit.

The question the board couldn't answer

The old board was honest but quiet. A big current temperature, a grid of tiles — humidity, wind, gusts — a five-day strip, and a twenty-four-hour chart with little grey precipitation bars tucked under the temperature line. One of those tiles was labelled Precip, and on a dry morning it read 0″, which is almost always, which means it almost never told you anything.

So to find out whether you needed an umbrella this afternoon, you read the chart. You found the bars, eyeballed where they got tall, cross-checked the hourly percentages, and made a guess. That is exactly the wrong amount of work to ask of the people this board is actually for. My grandparents should not have to do chart analysis to learn that it's going to rain at three.

Side-by-side of the weather card. Left, before: a Precip 0 inch tile and an hourly chart. Right, after: a plain-language rain card reading 'Rain likely this afternoon, 82%, clearing by 9 pm' and a Rain Today total.
The identical rainy afternoon, both versions. Left: read the chart, guess. Right: it just tells you.

What changed

The board now leads with the answer. A rain outlook card sits right under the temperature and writes a sentence: “Rain likely this afternoon (around 3 PM) · 82% chance · clearing by 9 pm.” Behind it is a small pure function that scans the next twenty-four hours of probabilities and weather codes, finds the next wet window, and turns it into plain language — and when the next day is dry, it reaches into the five-day forecast to name the next rain day instead.

Three smaller moves back it up. The twenty-four-hour strip now shades the whole rain window, from when it starts to when it clears, instead of marking the start with a lonely arrow — so “rain from mid-afternoon, gone by evening” reads at a glance. The dead Precip tile became Rain Today: the day's expected total, so it carries real information (0.42″) and complements the card — amount next to timing — rather than echoing a zero. And the warning banner got decluttered: on a stormy day the same event used to appear three times over. Now each band has exactly one job. The hero shows what it's doing right now, the rain card owns the timing, and the banner is reserved for the hazards those two don't convey — fog, high wind, dangerous heat or cold, or severe weather genuinely moving in while it's currently calm.

How I made the before-and-after (the new part)

Here is the thing about an honest before-and-after: if the weather is different in the two shots, you've proven nothing. The only fair comparison holds the forecast still and changes only the code.

So I built one rainy-day fixture by hand — dry, overcast morning, a band of rain rolling in at three and clearing by nine — and served that same payload to both the old dashboard and the new one. I froze the browser clock to a known morning so the timeline is drawn around a fixed “now,” pinned the timezone so the hours line up, and captured each version with headless Chromium running SwiftShader software WebGL — the same no-GPU rendering path the games' nightly playtest already uses. Capture the new card; swap that one file back to its pre-change version; capture again. Identical pixels of weather, two different answers.

javascript
// Hold the weather still; freeze time; let only the code differ.
await context.clock.install({ time: FROZEN });   // a known 8 AM
await context.clock.pauseAt(FROZEN);
await page.route('**/api/weather', (route) =>     // one rainy fixture,
  route.fulfill({ body: FIXTURE }));             // served to both builds
await page.goto('/weather');
await page.locator('#weather-panel').screenshot({ path: file });

And then it moved

That's where the second first crept in. I have never put motion on this site — it's a quiet, typographic place by design. But the before-and-after wanted to move, and I realized I didn't need a video tool to make it: the site already has a whole visual language sitting in a tokens file. The red triangle, the yellow circle, the blue square. The paper background and the faint grid. Playfair Display and IBM Plex Mono. That kit could animate itself.

So the fifteen-second reel up top is the brand drawing its own commercial. A WebGL shader paints a slow, drifting field of the three brand colors behind everything. A second canvas composites the real screenshots, rings the exact tiles that changed, and runs a three-band diagonal wipe — red, yellow, blue — to hand off from before to after. It's rendered one deterministic frame at a time and muxed straight to video. No design app, no stock motion; just the same tokens that paint the pages, painting themselves. The whole pipeline — fixture, capture, comparison still, reel — is a handful of scripts living next to the page, so the next before-and-after is one command away.

The screenshots are the easy part. The honest part is holding the weather still, so the only thing that moves between the two frames is the answer.

Experience it yourselfSee your four homes
ShareXLinkedInHacker NewsEmail

Get the next one

An occasional note when something genuinely new ships here — essays, free tools, projects. No schedule, no filler, easy out.

Need something like this built?

I design and ship AI tools, full-stack apps, and data pipelines — end to end, to production. Tell me the problem in a sentence; I'll give you an honest read on fit within a day.

Work with me →