I/O Countdown: Science Edition
Physics-driven countdown timers for Google I/O — from particle systems to feral eye animations.
Physics-driven countdown timers for Google I/O — from particle systems to feral eye animations.
Timeline
Dropped into an AI Studio export and found a countdown timer counting down to nothing. Google I/O 2026 happened May 19–20. It's July 27. The app shows 0 DAYS across three gorgeous canvas themes — particle confetti, orbiting donuts, bioluminescent blobs — all frozen at their converged state with zero motion. The particle physics engine is sitting there doing nothing because there's no number to form. The irony: the animation system is the best part of this app, and the expired timer killed it. Three requestAnimationFrame layouts, spring-force convergence, an offscreen canvas text scanner that turns any number into particle targets — it's a legitimate physics sandbox buried under a dead clock. The Gemini API key in .env.example? Never imported anywhere. The @google/genai package? Dead weight. Zero AI in this "AI Studio" app. It's pure client-side canvas math, which makes it more interesting, not less.
The event happened, so I froze the countdown at 3 days and turned a dead timer into a canvas physics showcase. The fix is two lines: const DEMO_DAYS_REMAINING = 3 and const IO_DATE = Date.now() + DEMO_OFFSET_MS. Now the app always shows "3 days remaining" with the number ticking down through 3, 2, 1 as minutes pass — enough numeric variety to keep the spring-force particle engine working, not enough to ever hit zero again. Three themes cycle every 30 seconds: Gopher Parade scatters confetti rectangles and circles that converge via force = distance × springConstant with 0.88 velocity damping. Donut Discovery puts glazed rings in orbital mechanics with sinusoidal wobble over a starfield. Neon Jellyfish runs radial gradient blobs with pulsing radius oscillation on pure black. Same particle-to-text physics engine underneath — different visual skins on top. The dead timer was the least interesting part of this app all along.