Skip to content
Back to work
Case study
Live · v3 · actively evolving

SaaSKitHub: shipping a game platform solo

Eleven games, a ten-chapter campaign with three endings, and about 36,000 lines of TypeScript, built solo end to end and shipped under ElevateIQ (Pty) Ltd. A satire about AI taking over software, made by someone whose day job is supervising AI that builds software.

Next.js 14TypeScriptSupabaseWeb Audio APISolo buildElevateIQ (Pty) Ltd
11
Games
10
Chapter campaign
3
Endings
The SaaSpocalypse cover on saaskithub.com: a ten-chapter campaign, ten games, three endings, and four rogue AI agents
The live cover on saaskithub.com

Overview

SaaSKitHub runs on one story. Four rogue AI agents, CRUSHER, SYNTH, NEXUS, and VORTEX, have taken over the world's SaaS infrastructure, and the player is the last developer. It plays as a ten-chapter campaign with branching choices and three endings, wrapped around an arcade of eleven games, a daily challenge, a leaderboard, and a satirical Chronicle.

Solo, end to end, meant every layer was mine: the narrative, the game design, eleven custom Canvas engines, a procedural audio system, the Supabase backend with anti-cheat, payments, and deployment. The banking case studies show reliability at scale on a team. This one shows carrying a complete product from idea to live, alone. The joke, an AI consuming software, is built by someone whose day job is checking the work of AI that writes software.

Shipped in public

It is at version 3.0.0 and still moving. The method is to ship, watch how people actually play, and change it in the open. The git history shows it: the audio engine was rewritten from Tone.js to the native Web Audio API to end webpack trouble; the controls went from a d-pad to a virtual joystick to a dual joystick with auto-aim; and the whole site flipped from arcade-first to campaign-first once it was clear the story drove engagement.

Iterate in public
Version 3 is not a finished monument. It is the current state of a thing that still changes, and saying so plainly is the honest version.

Architecture

A shell holds the campaign and the arcade and routes players into games. The eleven games share a common loop, input, score, and audio layer, so a new game is a new engine on shared rails rather than a rebuild. Supabase stores scores behind server-side anti-cheat, and LemonSqueezy handles payments.

Campaign shell
Story, choices, routing
11 game engines
Shared loop, input, audio
Supabase + payments
Scores, anti-cheat, LemonSqueezy

Decisions worth calling out

  • Four distinct hunt algorithms in Agent Hunt: CRUSHER chases directly, SYNTH aims where you will be, NEXUS flanks from the side opposite the others, and VORTEX swings between random patrol and sudden pursuit. Four enemies that feel coordinated, not four copies of one chaser.
  • Final Battle composes three existing engines: its three phases reuse Dead Crossing, Breakpoint, and Agent Hunt through the shared loop and input layer, and the player's earlier choices decide which ending plays.
  • Procedural everything: no audio files and no sprite sheets. Sound, visuals, and animation are generated in code, so the platform ships as pure TypeScript. The audio engine alone is about 3,000 lines of Web Audio synthesis.
  • One input model, many mechanics: swipe judgment, highway dodging, and a twin-stick tactical shooter all run on the same mobile-first input, with auto-aim that snaps to the nearest enemy.
  • Zero auth, instant play: no signup and no login. Campaign progress and unlocks live in localStorage, so it feels like a native app and the barrier to starting is nothing.

Technologies

FrameworkNext.js 14 App Router, TypeScript 5.7 strict, React 18.3
RenderingCustom HTML5 Canvas engines, fixed 60fps loops, custom collision and particle systems
AudioNative Web Audio API, procedural synthesis, about 3,000 lines, no audio files
DataSupabase PostgreSQL for scores and subscribers, server-side anti-cheat, localStorage for progress
PaymentsLemonSqueezy, priced in ZAR
ScaleAbout 36,000 lines of TypeScript, 11 games, 50 commits

Key takeaways

Every game sits inside one story. A Tetris clone is not a Tetris clone here, it is holding the last transmission tower open while everything else falls.

Shipping this solo meant owning every layer, from a particle system to a payment webhook, and keeping eleven engines coherent on one shared spine. The same discipline that keeps a channel service honest is what keeps a game platform from turning into eleven separate piles of code.

The judgment I sell, as a game

One of the eleven games, AI or Human, is the whole positioning in a swipe. Cards flash up, tweets, images, headlines, reviews, and you call each one AI-made or human-made. Telling the confident machine answer from the correct one is exactly the work I do for a living.

AI writes code fast. Knowing when it is wrong is the part you cannot generate. That game is a small, honest test of it.

Play AI or Human on saaskithub.com