I Built Space Waves During My Breaks, Not My Free Time
Most projects I hear about start with someone sitting down and deciding to build something. Mine started with someone trying to load a webpage and failing.
I was on a work network at the time, the kind where IT blocks anything that isn't explicitly whitelisted. I had a browser game bookmarked, nothing serious, just a small space-themed shooter I used to burn ten minutes between tasks. That day it wouldn't load. Blocked. I remember being oddly annoyed about it, more annoyed than the situation probably deserved. It was just a game. But something about being denied something so trivial stuck with me longer than it should have.
A few weeks later I tried the same game on a friend's laptop, this time on a school network. Same result. Blocked again. Different institution, different filter, same wall. That's when the annoyance turned into a question. Why does a lightweight browser game keep tripping filters designed for actual security threats? And could I build something that didn't?
I want to be honest about where I was starting from. I wasn't a game developer. My coding background was scattered, some scripting here, a bit of frontend work there, nothing close to what building a real-time browser game requires. So the first real work wasn't writing game code at all, it was relearning JavaScript properly. Not copy-pasting from old tutorials, but actually understanding what I was writing. I spent a stretch of nights working through the Canvas API specifically, since I knew from the start I wanted something that would run instantly in a tab with no plugins, no downloads, nothing that would give a filter a reason to flag it.
This is the part where I'll admit AI tools did a lot of heavy lifting for me, and I don't think that's something to hide. Claude became something like a study partner during this period. Not writing the game for me, but explaining the parts I kept getting wrong. There was a stretch where my ship's movement felt smooth on my laptop but jittery on a friend's older machine, and I had no idea why until I asked and got walked through the idea of decoupling physics updates from frame rendering. That single concept, a fixed timestep, fixed a bug I didn't even know had a name.
Cursor handled the day to day grind of actually writing and rewriting code. Being able to describe what I wanted changed and watch it get built out, then adjust it by hand until it felt right, meant I could test five bad ideas in the time it used to take me to test one. A lot of what ended up in the final game came from throwaway experiments that only existed because iterating got cheap.
None of this happened fast. There were stretches where I'd fix one bug and create two more, evenings where the ship controls felt worse after I "improved" them, days where I questioned why I was spending free time debugging collision detection for a game nobody had asked me to build. But the annoyance that started this thing never really went away, it just turned into stubbornness.
The game itself is deliberately simple. You control a small ship weaving through incoming waves of obstacles that get faster the longer you survive. Left, right, dodge, grab the occasional power-up, try to beat your last run. No accounts, no tutorials, no menus to click through first. You land on the page and you're already playing within a couple seconds. I kept it this way on purpose. If the entire idea was to give people something to play during a short break on a restricted connection, then anything that slowed down that first five seconds was working against the whole point.
Performance became something close to an obsession for me, more than visuals ever were. I stripped the stack down to plain JavaScript and Canvas, avoided heavy frameworks, avoided third party embeds, anything with a reputation for getting caught in school or corporate filtering. I tested it obsessively on the exact restricted network that started all of this, partly out of necessity and partly, I'll admit, out of a petty satisfaction in finally beating the wall that annoyed me in the first place.
At some point it stopped being just mine. A coworker asked for the link. Then someone else. It moved the way small things move when people just want an easy way to kill a few minutes and pass it along without thinking too hard about it. I kept adjusting based on what people actually said, tightening touch controls for phones, cutting anything that delayed the first load, small changes that only matter to someone who has ninety seconds free and nothing else to do with them.
Eventually it became something with a real name and a real home. Space Waves is what I ended up calling it, and it now lives at spacewaves2.net, still built around that same original idea. Load fast. Play immediately. Don't get caught in a filter meant for something else entirely.
If there's anything I'd pass along from this, it's that the most interesting things I've built never came from trying to spot a gap in a market. They came from being personally irritated by something small and refusing to let it go. Claude helped me understand what I was actually doing wrong instead of guessing. Cursor let me act on that understanding fast enough to keep momentum. But the whole thing traces back to something far less impressive than any of that, a blocked tab, during a bad afternoon, on a network I didn't choose.
