Inspiration
Most tower defense games treat every enemy the same way: it appears, you shoot it, it's gone. We wanted the moment of impact itself to mean something. Frequency: Switch or Ditch starts from a simple question: what if destroying an enemy wasn't the good outcome? What if the good outcome was recognizing what it actually was, and answering it correctly?
That became the premise: an abandoned TV and radio station, decades of archived electronics — 1940s console radios through 1990s CD walkmans — corrupted by a runaway signal and marching from the archive room toward the control room. You're a containment specialist, not an exterminator. Every unit you bring down is either recalibrated — hit with a tower tuned to its own frequency family, resolved cleanly, worth real money — or scrapped — hit with the wrong frequency, brute- forced down, worth much less. Same enemy, same outcome (it stops moving), completely different value, and a completely different feeling. Obliteration is the fallback plan, not the goal.
What it does
Frequency: Switch or Ditch is a self-contained, single-player, portrait-orientation tower defense built for mobile play. You place towers from five frequency families (Bass, Mid, Treble, Static, plus a universal starter with no family of its own) along a fixed path, matching each incoming unit's frequency to recalibrate it for a full payout instead of scrapping it for a fraction. Complementary families placed next to each other unlock an ensemble bonus — a visible, "lit up" connection between towers that boosts their combined effectiveness, rewarding thoughtful placement over just filling every tile. Across 8 escalating waves, a signal-integrity meter tracks how much you're containing versus losing to the control room; clear the gauntlet final wave with the needle still up and you win, with an end-screen musical-tier label reflecting how much of the run you played by ear versus by force. A Redline ability — spend currency to push every tower past its normal limit for a few seconds, then pay for it with a brief overheat — is there for the moments the wave gets away from you.
How we built it
Built end-to-end with Claude Code, Anthropic's AI coding CLI,
working directly in this repository session by session alongside a human developer who came in
experienced with traditional software but new to web/JS/Three.js — prioritizing understanding the
stack over pure shipping speed. The architecture leans into that: the entire game-rules layer
(currency, combat resolution, wave scheduling, win/loss detection) is plain, Three.js-free
JavaScript, fully covered by 169 automated Node tests, with the Three.js rendering layer kept thin
and verified by playtesting instead. Self-contained HTML5/Three.js, no external dependencies at
runtime, no network calls, single assembled index.html per the competition's packaging rules. Full
session-by-session detail lives in the submitted build log.
Challenges we ran into
The recalibrate-vs-scrap mechanic sounds simple but has real edge cases once you build it: what happens when an enemy takes damage from both a matching and a mismatched tower before it dies? (Whichever accumulated more damage wins — a genuine tie resolves as scrapped, not recalibrated, so "recalibrated" always means the matching hits truly dominated.) What does the Electron Gun — a universal starter tower with no frequency family of its own — actually feed into? (Always Scrap, by construction, with no special-casing needed.)
We also caught a real gap during final playtesting, days after the mechanic was built and tested in isolation: the ensemble adjacency bonus was fully implemented and passing its own tests, but the game's actual placement/sell/reposition logic never triggered the recalculation that turns it on — so in real play, it silently never activated, and there was no visual indicator that it existed at all. Fixing it properly (wiring the recalculation into every operation that changes board layout, adding a visible connector + status readout, and testing it) mattered more than shipping around it.
Accomplishments that we're proud of
A tower defense game where the core loop rewards recognizing your enemy, not just outgunning it — and a build process where the game rules are provably correct (169 passing tests) independent of whether the 3D scene renders correctly on any given machine.
What we learned
That a design mechanic can be completely correct in isolation and still be dead on arrival if nothing in the game actually calls it — and that the fix for that isn't more code review, it's playtesting the actual, running build until something looks wrong, and then chasing why.
What's next for Switch or Ditch
A bigger board with multiple enemy entry points, a clearer in-game read on what's coming in a wave, and tuning the currency curve and difficulty against real playtesting data rather than placeholder numbers.
Built With
- claude
- esbuild
- html5
- javascript
- node.js
- three.js
Log in or sign up for Devpost to join the conversation.