Inspiration
We wanted a game that didn't need a tutorial and didn't need you to compete against anyone to feel invested. Most "return every day" mechanics on Reddit lean on streak-counters and nothing else. We were drawn to the idea of a single shared object — one tower, no separate instances per user — where every visitor's one daily action becomes part of the same fragile, physical thing everyone else is watching. The tension isn't "did I win," it's "is our tower still standing," and that felt like it fit how a subreddit actually behaves: a lot of individual small contributions building toward something collective, with the whole community feeling the outcome together.
What it does
Stackwatch is one shared, physically simulated tower per subreddit. Each player gets exactly one block to drop per day. Before committing, they see what kind of block they've been dealt for the day — a normal block, a wider and more forgiving steady block, or a rare golden block worth double leaderboard credit — so there's a small moment of anticipation before every drop. They pick a color, can attach a short message to their block, and drop it.
The server runs a real physics simulation (via Matter.js) on every single drop: it recreates the entire existing stack as physics bodies, drops the new block, and steps the simulation forward to see what actually happens. If a block lands too far off-center, tips past a threshold, or slides off the stack entirely, the whole tower topples — for everyone, at once.
Around that core loop:
- Builder titles (Newcomer → Apprentice → Builder → Architect → Master Builder) track lifetime contribution and give players a sense of standing that persists across collapses.
- Milestone tiers unlock cosmetic decoration as the current tower climbs past 10/25/50/100 blocks, giving the tower itself a visible sense of stakes.
- Hall of Fame snapshots the tower's exact shape at its tallest, right before it fell, along with who contributed — so a spectacular collapse becomes a permanent record instead of just a reset.
- Streak days and a running leaderboard of total blocks placed give both short-term and long-term reasons to come back.
- Moderators can tune a Tower Difficulty setting (relaxed / normal / strict) that controls how forgiving the physics tolerance is, so a subreddit can decide how chaotic they want their tower to be.
How we built it
Stackwatch is built on Devvit Web, Reddit's platform for shipping web-tech apps as native Interactive Posts, with Phaser driving the client-the sole physics authority. It replays the entire stack's resting state as physics bodies, drops the new block, steps the simulation for a fixed number of ticks, and only then decides whether the tower toppled — the client never simulates anything itself, it just renders whatever state the server returns. That keeps every player's view of the tower consistent and makes drops fair regardless of client performance.
State lives in Redis via @devvit/web/server: the current tower's blocks and start time, season-level records (tallest tower ever, total towers built), per-user stats (last drop date, total/golden blocks placed), a leaderboard sorted set, and a Hall of Fame keyed by collapse timestamp.
The daily block-type roll (normal/steady/golden) is deterministic rather than pure random: it's a hash of userId:date, so a player checking the app multiple times in the same day always sees the same upcoming block, and the server can independently re-derive the same result at drop time without having to store it in advance.
The backend is a Hono app (endpoints for dropping a block, fetching tower state, the leaderboard, and Hall of Fame), everything written in TypeScript end to end, bundled with Vite.
Challenges we ran into
Getting the physics simulation to feel fair was the hardest part. Simulating from scratch on every single drop (rather than keeping a persistent physics world running) was necessary for server-authority and determinism, but it meant tuning exactly how many simulation steps were "enough" to settle without being slow, and tuning per-difficulty topple thresholds (angle, horizontal shift, and landing tolerance) so a slightly-off-center block wobbles convincingly instead of either always surviving or always toppling. Distinguishing "this block is precariously balanced" from "this block has actually fallen" also took real iteration — we ended up treating anything that settles at or below ground level as the clearest unambiguous signal, rather than relying on angle alone.
Making a single global, mutable obthe one-drop-per-day gate, the deterministic block-type roll, and treating collapse as a first-class event (with its own Hall of Fame snapshot) all exist because the tower's shared, permanent nature is the whole point of the game, not an implementation detail to work around.
Accomplishments that we're proud of
Getting a server-authoritative physics simulation running reliably inside Devvit's serverless environment — with no persistent physics world, just deterministic replay-and-settle on every request — while keeping drops fast enough to feel responsive. We're also proud of how much the game's retention loop comes from structure rather than gimmicks: a real, shared, at-risk object that the whole community has to look after, instead of a personal streak counter bolted onto an otherwise disconnected game.
What we learned
Building server-authoritative physics for a casual game taught us a lot about the gap between "physically accurate" and "fun to watch" — a simulation that's too strict makes every visit feel punishing, and one that's too forgiving makes the collapse feel unearned. We also came away with a much better sense of how to design a retention loop around anticipation before an action (seeing your block type before you drop) rather than only rewarding the action after the fact.
What's next for Stackwatch
- Per-block replay so players can scrub through exactly how a Hall of Fame tower grew and eventually fell.
- Comment-driven contributions — letting a top comment on the post influence the next day's block (color, message, or type) so the game pulls more directly from the subreddit's existing discussion.
- Cross-subreddit seasons and a global leaderboard, so towers in different communities can be compared.
- More milestone cosmetics and a wider color/message customization pass on individual blocks.
Built With
- devvit
- hono
- matter.js
- phaser.js
- redis
- typescript
- vite
- web
Log in or sign up for Devpost to join the conversation.