Tap the left / right half to turn that way — every stroke also pushes you forward · hold longer for a harder turn · arrow keys work too
The physics is the game
Nobody teaches you the ferry angle here — the lake does. The hull's sideways drag is about ten times its forward drag, which is the whole trick: aim straight at the buoy and the wind walks you down the lake; quarter into it and your own hull turns the crosswind into track. Real canoeists know the move. The simulation never mentions it — it just makes it true, the way water does.
The wind is a fact
On load, the page asks the National Weather Service for the latest observation at KELY — the Ely airport, a few minutes from the real Shagawa Lake — and that reading drives both the particle field you see and the force on your hull, from the same noise field with the same seed. When the station reports calm or goes quiet, the badge flips to MEMORY and a plausible March wind takes over, seeded by the date so every day's memory is reproducible.
The stack is the boast
Raw WebGL2 renders the wind — sixteen to sixty-five thousand particles living in ping-pong textures, advected by a curl-noise gust field on the GPU. Canvas 2D draws the lake, the track, and the boat. React mounts it; nothing else is imported. No Three.js, no game engine, no physics library — the services page says “up to and including a playable game,” and this is that sentence, compiling.
The house rules hold
The buoy is the only red on the map — color is an event, even mid-game. Reduced motion (yours or the footer's MOTION switch) stills the whole thing into a printed survey poster with today's real reading in the title block. Finish a crossing and the challenge link carries your wind's seed, so “beat my time” means beating it on your water.
Back to the test patterns — or if this is the kind of thing you want built into something of yours,the station takes requests.