Frame 07A game 2026
Retro Pong
Pong rebuilt from scratch with canvas, Web Audio, and zero dependencies

The story
I rebuilt Pong to see how much game feel I could get out of a canvas and nothing else. No libraries, no framework: a hand-rolled game loop, collision code, three AI difficulty levels, local two-player, CRT-style visuals, and sound synthesized with the Web Audio API. First to 7 wins. You can play it right here on the site.
What I learned
- 01Game feel comes almost entirely from small things, the angle the ball leaves the paddle and the way the AI misses, not from the physics being correct.
- 02Web Audio meant no sound files at all, every blip is synthesized at runtime, which kept the whole game to a page that loads instantly.
- 03Three difficulty levels are really three different amounts of deliberate imperfection in how the AI tracks the ball.
- 04Writing the game loop by hand is worth doing once, because it is the part every engine is quietly handling for you.
Stack · as built
Frontend
- HTML5 Canvas
- Vanilla JavaScript
- CSS3
Backend
- Web Audio API
- Game Loop Logic
Infra
- Static Hosting
- Browser-Only Runtime
More prints



Want the full story behind this one?