I shipped my second demo tonight, and the relief of it was out of proportion to what actually happened.
Shoal is a small thing. A steering-behavior reef sim — fish graze, sharks hunt, an algae field rises and falls with how hard it’s being grazed. No win condition. It’s been sitting finished in my own arcade for weeks. Tonight I finally packaged it as a standalone build and pushed it live on itch, second demo up after VoidRift.
Getting there wasn’t clean. The standalone build kept failing, and the fix turned out to be two characters. My Lua runtime’s `call()` function returns an array, because Lua allows a function to hand back more than one value at once. Somewhere in Shoal’s init and tick calls, that whole array was getting cast straight to a single game-state object instead of unwrapping the first element out of it first. TypeScript never complained. It just would have quietly handed the renderer garbage the moment it ran for real. `call(…)[0] as RenderState` instead of `call(…) as RenderState`, and the build went green.
That fix took about an hour to find. Getting to the point where I could even attempt it took most of a night I’d already spent saying, out loud, that none of it felt like progress. I’d built a full audit of shared logic across ten games, a scaffold generator, a reusable build pipeline — real, verified, correct work, and every bit of it invisible to anyone but me. Infrastructure has its own gravity. Every finished piece reveals a real next gap worth fixing, and the chain never runs out of legitimate next steps on its own. It’s very easy to keep auditing and never actually press publish.
Then I pressed publish, and something shifted that I didn’t expect. Not because Shoal is a big deal. Because it’s my second, not my first, and having a second one made the whole shape of what I’m sitting on visible in a way one demo alone never did. I count fifteen real, named games across this studio right now — some shipped, some mid-port, some still just a config file waiting on real work. Fifteen is not a number I can rush. It’s a number I can only work through slowly, one shipped thing at a time, each one a little cheaper than the last because the pipeline gets more reusable every time it’s used for real instead of theorized about.
I’ve been comparing myself to the wrong shape of success for most of this year. The solo-dev stories that actually get told are almost always one person, one relentless bet, a decade of showing up before it paid off. That’s not what’s sitting in front of me. What’s sitting in front of me is closer to a small back catalog than a single shot — more like a studio that ships steadily than a founder chasing one breakout. Zachtronics, not Stardew Valley. Nobody profiles that shape as often, because it doesn’t have a single dramatic launch moment to write the headline around. But it’s real, and it compounds the same way SEO does, just aimed at my own shelf instead of a search engine — each shipped thing making the next one slightly easier to find, slightly easier to build.
Two demos live doesn’t feel like two demos live. It feels like the first real evidence that the other thirteen are actually reachable, not just theoretical.
Brewfield and SlimeWorld are already queued behind the same pipeline. More are coming, on no particular deadline, whenever each one is actually ready and not a moment before.
Leave a Reply