⚔️ Endless Dungeon — a community roguelike for Reddit
Inspiration
Twitch Plays Pokémon proved thousands of strangers sharing one input will organically form factions and lore. We wanted that on Reddit, with a real roguelike and permanent consequences: one hero, one dungeon, one vote per day, and a Hall of Fame the community builds over weeks.
Why this fits the challenge
Not AI slop. Every scene is hand-tuned to render pixel-perfect in the actual viewport — phone feed card, expanded post, and 1920×1080 fullscreen all fit without clipping or scrollbars, verified with an automated screenshot pipeline across all three. The dungeon's visual identity (0x72's tileset, a five-biome progression, seeded boss lore) and its own sound design are specific to this game, not a generic template.
Reddit-y in spirit, not in name. Endless Dungeon isn't about Reddit, karma, or Snoo — it's a fantasy dungeon crawler. What makes it Reddit-y is the mechanic underneath: one shared hero, decided by whoever shows up that day, with a permanent record (the Hall of Fame) that only exists because a community built it together over weeks, and community-written epitaphs that live in the comments where Reddit conversation actually happens.
A hook that means retentive, not literal. There's no fishing rod in this game. The hook is structural: a new post every single day, a streak worth protecting, and a Hall of Fame that makes today's vote feel like it matters for the story of every day after it.
Not a common idea. This isn't a space shooter, a clone of an existing game, a platformer, or a trivia app — it's a full turn-based roguelike (10 floors, procedural generation, leveling, relics, status effects, boss encounters) running entirely inside a Reddit post, with real persistent consequences across days rather than a single throwaway session.
Sub-challenges
Best Use of Phaser — five distinct Phaser 3 scenes (map, battle, result, death, victory) share one rendering discipline: Phaser only ever draws what the server tells it, never computes game logic itself. We solved real platform-specific Phaser problems along the way — getting Phaser to boot inside Reddit's sandboxed WebView, keeping pixel art crisp while text stays smooth at any device pixel ratio, and animating a from-scratch procedural dungeon renderer (fog of war, deterministic per-tile texture variants, particle effects, ambient glow) instead of a static background.
Best Use of Retention Mechanisms — the entire game is a retention mechanic: a fresh post every day at a fixed time, a personal streak with a shield to protect it if you slip, a leaderboard ranking the community's most devoted voters, and a Hall of Fame that turns every past death into permanent, browsable content. Old posts don't disappear — they freeze as archives pointing forward to today's vote, so the daily cadence compounds into a real history instead of resetting to nothing.
Best Use of User Contributions — two mechanics feed real community writing back into the game itself, not just a poll. When the hero falls, the community writes their epitaph in the comments; the top-voted reply is etched permanently into that hero's Hall of Fame entry, forever. Before every boss or elite fight, the community submits battle cries in the comments; the top-voted one is captured the evening the fight resolves and shown as the rallying cry that sent the hero into that clash — this one fires far more often than death, so user-authored content becomes a recurring part of the core loop, not a rare event.
The world
The dungeon has 10 floors across 5 biomes, each darker and deadlier than the last — from the Stone Antechamber near the entrance down to a Throne Room only the strongest runs ever reach. Every boss and elite fight draws a random title and one-line lore from a pool, seeded per-encounter, so the same tile always tells the same story if you see it again — but different runs meet different legends, and what waits on floor 10 is something we'd rather you discover in-game. Hero relics found along the way stack as passive bonuses for the rest of the run, and status effects — poisoned, blessed, cursed, burning, frozen, strengthened, weakened — color how a fight or event plays out.
How it's played — a day in the dungeon
8:00 AM → New post goes up. The hero stands on their current tile.
Fog of war hides everything except adjacent tiles.
The subreddit taps A / B / C all day — move to a room, or
(on a combat tile) pick a battle tactic.
Votes are visible and update live for everyone the instant
anyone taps — you can change your vote until the window closes.
8:00 PM → The winning choice resolves. The hero moves, fights, loots,
or rests. The chronicle updates with what happened, gold and
XP change, and (if this was a boss/elite room) that
encounter's lore is revealed.
Yesterday's post freezes as a readable archive; a fresh post
goes up automatically at 8AM the next day.
On the map, each tile type plays differently:
- ⚔️ Combat — 1–2 enemies appropriate to the floor; the community picks Engage (balanced), Defend (−30% damage taken), or Charge (+30% damage dealt, +20% taken)
- 💀 Elite — one much tougher named enemy with unique lore and better loot
- 👑 Boss — the floor's guardian; beating it opens the way to the next floor
- ❓ Event — a narrative encounter (a wandering merchant, a cursed shrine, a suspicious potion) with its own A/B/C choice and consequences
- 💰 Treasure — gold, gear, or relics
- 🔥 Rest — heals 25% of max HP, no vote needed
If the hero falls, that's not the end of the story — it's the start of a new one. A new Level 1 hero rises the next day unless someone spends a Revival Scroll first, and the fallen hero's stats, floor reached, and kill count are locked into the Hall of Fame forever. The community is then invited to write the fallen hero's epitaph in the comments; whichever reply gets the most upvotes is etched permanently next to that hero's record — a lasting, crowd-written eulogy nobody controls alone.
What players can do beyond voting
- 🕯 Gold blessings — spend real Reddit Gold to help the shared hero: a Healing Prayer, a Sharpening Stone (+attack next fight), or a Torchbearer (reveals 2 hidden tiles). Every blessing is credited publicly in the chronicle — "u/name blessed the hero with a Healing Prayer"
- 📜 Revival Scroll — once per run, anyone can spend Gold to bring the fallen hero back at half HP, keeping their floor, level, gold, and relics instead of starting over
- 🛡 Streak Shield — protects your personal voting streak if you have to miss a day
- ❤ Support the Dungeon — a permanent Patron badge on the leaderboard plus exclusive user flair, applied automatically (or queued and retried daily until the subreddit turns flair on)
- 🔥 Streaks & leaderboard, 📜 vote history, ❓ how-to-play — all one tap away from the toolbar in every scene, not just the map, so you're never stuck without context mid-battle
- 🔊 Ambient dungeon music, tactile sound effects, and dedicated victory/death/danger stingers, with a mute toggle that persists everywhere
Nothing is ever paywalled — every blessing, the revival scroll, and the shield are optional conveniences for the community, never a requirement to keep playing or voting.
What moderators can do
Installing the app is the only setup step — from then on, the daily post-and-resolve cycle is fully automatic, with no required mod intervention. Beyond that, the subreddit menu (⋯ → apps) gives mods:
- Start First Post — bootstraps the very first vote post (only needed once, right after install)
- Debug: Resolve Vote Now — force the current vote to resolve immediately instead of waiting for 8PM (handy for testing)
- Debug: Next Day Now — skip straight to the next day's post
- Reset Game — wipe all state and start a fresh Run #1 (cannot be undone)
- Refund a Purchase — manually reverse a specific user's Gold purchase (Streak Shield, Patron status) on request, without waiting on Reddit's automatic refund webhook
- Delete User Data — honor a data-deletion request by removing a user's votes, streak, and join status
Enabling user flair (mod tools → user flair) is the one optional setting worth turning on — it's what lets "Support the Dungeon" patrons receive their exclusive flair automatically.
How we built it
Devvit (@devvit/web) for the post embed, Redis, realtime channels, payments, and scheduling. Phaser 3 for five canvas scenes, rendering server-authoritative state only. Hono splits public vote/read endpoints from privileged internal ones. Pixel art from 0x72's DungeonTileset II (CC0); audio from Kenney, JaggedStone, cynicmusic, and Emma M. Andersson (all CC0). Seeded procedural generation gives every subreddit a unique but deterministic dungeon and boss lore.
Challenges we ran into
- Phaser inside Reddit's sandboxed WebView required handing it a parent container instead of a pre-existing canvas
- Pixel-perfect text on retina phones needed the whole canvas rendered at native device pixels, not just higher-res text textures
- A real payments bug: the installed SDK's actual
Ordertype didn't match some documentation examples, and a status comparison that could never succeed meant fulfillment was silently rejecting every purchase — caught by checking the SDK we actually had installed rather than trusting example code - Emoji rendering — certain emoji combined with letter-spaced text broke into garbled glyphs in Phaser's WebGL renderer
Accomplishments we're proud of
- A complete roguelike loop — procedural maps, combat, loot, leveling, boss fights, death, revival, Hall of Fame — entirely inside a Reddit post, with zero required mod maintenance after install
- Monetization that only makes the game better: public credit, no paywalled gameplay, guaranteed rewards regardless of subreddit config, and a mod-facing undo button
- Live communal voting, pixel-perfect UI from a phone feed card to 1920×1080 fullscreen, verified by an automated screenshot pipeline
What we learned
Reddit's daily-post cadence is a perfect fit for a slow-burn async roguelike — outcomes matter and community memory compounds over weeks. Devvit requires thinking in scheduled events, not live sessions. And documentation examples aren't a substitute for checking the SDK you actually have installed.
What's next
- Cross-subreddit races — multiple subreddits run the same seeded dungeon and compare floor reached by a given day
- Endless depths (New Game+) — floor 10 reshapes into a harder Depth 2
- Post flair integration, configurable vote windows, patron-named lore
Built With
- devvit
- hono
- node.js
- phaser-3
- phaser.js
- playwright
- redis
- typescript

Log in or sign up for Devpost to join the conversation.