Inspiration

Before there were app stores, there was a browser tab open to Yahoo! Games — and for me that tab was almost always Yahoo! Towers. Drop a stack of three, line up the colors, watch the well climb while you sweated the next piece, and dump gray junk on the poor soul across from you. It was the perfect "five more minutes" game: dead simple to start, secretly bottomless to master.

MongoTowers is my love letter to that feeling, rebuilt for where people actually kill five minutes in 2026 — inside a Reddit post. Same lizard-brain loop (stack, match three, blow it up), but with one signature twist: spell M-O-N-G-O-! in a line and you trigger a full-board super-clear, the only thing that busts the gray junk. It's the kind of game engineered to survive a bathroom break and then quietly eat your whole commute. One thumb, one seat, no shame.

What it does

You drop stacks of three letters into a rising well. Line up 3+ of the same letter in any direction — row, column, or diagonal — to clear them, and chain those clears into combos for the big points. The floor keeps rising and speeding up the longer you last, so it's a survival marathon, not a sprint. Everyone playing on a given day gets the same daily board (one shared seed), so your score is directly comparable to the rest of the sub. Beat your best and you can brag straight into the comment thread — and if you top yourself later, the app edits your existing comment instead of spamming a new one. There's a per-day leaderboard, a show-up streak, and a "continue your run?" resume if you got pulled away mid-game.

How I built it

It's a Devvit Web app — Reddit's Developer Platform — so the whole game lives in a webview attached to a post:

  • Client: a Phaser 4 board doing all the juice — particle bursts, screen shake, combo pops — wrapped in a hand-built DOM UI. The look is deliberate claymorphism: Fredoka type, a candy sky gradient, chunky toy buttons, hard offset shadows and no blur, so it reads as a toy, not a spreadsheet. All SFX are synthesized at runtime via Web Audio — zero audio asset files shipped.
  • Server: a tiny Hono server on @devvit/web/server. Data is Redis-only — the day's shared seed, the leaderboard ZSET, streak counters, and the brag-comment bookkeeping. Social actions (comment, the splash card) go through the Reddit API.
  • Engine: the rules are ported from my older WordBlast mongo.ts into a self-contained src/shared/engine — a MongoBoard (the match/clear/gravity rules) driven by a MarathonGame controller, all unit-tested headlessly so I could iterate on feel without launching Reddit.

The scoring is intentionally top-heavy so cascades feel like fireworks — points scale with how deep a single chain reaction goes, roughly:

$$\text{points} = B \cdot N_{\text{cleared}} \cdot M^{\,(\text{chain}-1)}$$

So a 4-deep cascade is worth dramatically more than four separate clears — which is the whole reason you learn to set up the board instead of clearing greedily.

Challenges I ran into

Scope was the boss fight. I started way too ambitious: an async, deterministic ghost-replay ladder where your banked run defended your rank while you were offline, plus a loadout/token economy. I built a whole determinism contract around it — every bit of randomness flowing through one seeded PRNG so a run was a pure function of (seed, inputs). It was elegant. It was also going to swallow the deadline. I made the hard call to cut multiplayer entirely and ship a tight single-player marathon. The game got better for it — the constraint forced focus.

Devvit makes you rethink "backend." No external servers, no fetch, no databases beyond Redis, no ML on user data. So the "social" layer couldn't be a realtime service — it had to be the Reddit post itself: a daily seed for fairness, the comment thread as the leaderboard, runAs for posting on the player's behalf. Re-deriving every feature as "what can I do with a seed and a comment thread?" was the real design work.

The splash card has to lie convincingly. Reddit shows an inline preview the user can scroll right past, on a strict performance budget. Making that card match the in-game candy look and load fast enough not to be skipped — while staying tap-only and respecting mute-on-scroll — took more fiddling than the actual gameplay.

What I learned

That subtraction is a feature. The version I cut would've been impressive on paper and unfinished in practice; the version I shipped is something people actually replay. I also learned the shape of Devvit end to end — Phaser 4 (the 3→4 jump needed zero engine changes, which was a pleasant surprise), Redis as your only memory, and designing for a context where the player can leave at any second and you have to earn the next tap. Turns out that's the same discipline that made Yahoo! Towers great in the first place.

Built With

Share this project:

Updates

Submission history