Inspiration
I wanted a game where the thing you carry between days is not loot or levels, but knowledge, and where that knowledge belongs to a whole community instead of one player. Reddit is already a giant shared logbook: people pool what they know in comments until a hard thing becomes solvable together. So I built a dungeon whose rules are deliberately hidden, and made the only way to learn them a communal effort. You die, you leave what you figured out behind, and the next person picks it up.
The one-life-a-day framing came from wanting each descent to feel like an event worth talking about, the way a daily puzzle does, but with a roguelike's tension underneath.
What it is
The Undervault is one shared dungeon that reshuffles its secret laws every day. You get a single candle, so a single life, per day. Does ringing a bell wake the floor or scare something off? Does salt stop a slime or feed it? Nobody is told. You try things, you usually die, and you bank what you learned at a Waystone so it enters a shared Codex that everyone reads.
Everything you meet down there is a trace of a real player who descended today: a corpse on the stairs, a ghost replaying someone's last moments, a chalk sign on a wall, a Codex line marked "confirmed by 7 delvers." There is a season-long goal too. Someone is waiting at the bottom, and when the community gives 100 candles between them, the gate opens and she comes home. It happens once, and everyone got her there.
How I built it
The game runs inside a Reddit post on Devvit Web, with a Phaser 4.2 WebGL scene for the world and lightweight DOM overlays for the text-heavy screens. The world is drawn in isometric 2:1, but the simulation underneath is a plain square grid that never knows the iso view exists, so all the game logic stays simple and testable while the presentation stays pretty.
The important design choice is that the client never holds the secret rules. All game logic is a pure, integer-only, deterministic simulation with a seeded RNG. When you touch something unknown, the server replays your entire run against the hidden rule table and hands back only the one rule you actually hit. You cannot bank a truth you did not really discover, because the server refuses invented claims. A golden-replay test suite keeps the simulation byte-identical across every change.
The stack is TypeScript end to end: Hono on the server, Redis for storage, Zod validating every request, and Vite building the two entry points (a tiny splash card that paints instantly in the feed, and the full game that loads only when you tap in).
Challenges I ran into
- Keeping secrets truly server-side. A knowledge game falls apart if players can read the rules out of the client bundle. Resolving unknown interactions over a server round-trip, without making movement feel laggy, took a lot of tuning (batching acts, caching resolved rules, retrying transient failures).
- Determinism. One integer out of place and every player's dungeon diverges. Locking the sim to pure integer math and guarding it with a golden corpus was essential and unforgiving.
- Making a communal game feel communal on a cold-start post. Corpses, echoes, and signs only exist if other people played that same day, so the whole hook is invisible on an empty post. I leaned into narrating every trace as a real person, and seeding the world before showing it off.
- Mobile. Getting crisp rendering, a viewport that does not clip the HUD, and audio that unlocks correctly inside the Reddit app were all their own small battles.
What I learned
Building on Devvit means embracing real constraints: Redis is your only persistence, there is no external network, and endpoints are stateless and short-lived. Those limits pushed me toward a cleaner, more honest architecture than I would have written otherwise. I also learned how much work it takes to make deep systems legible. The cleverness is worthless if a player cannot see it, so a huge amount of the effort went into surfacing discovery, contribution, and lineage in words a first-timer understands.
Built With
- devvit
- hono
- phaser.js
- reddit-developer-platform
- redis
- typescript
- vite
- webgl
- zod
Log in or sign up for Devpost to join the conversation.