Inspiration
We wanted to build something that gave Reddit users a real reason to come back every single day — not just a novelty someone plays once. We started with a daily combination-cracking puzzle, but during development we realized it didn't have the moment-to-moment fun that makes a game genuinely addictive. So we pivoted to something that kept the "daily shared challenge" spirit but wrapped it in fast, immediate, replayable gameplay: a runner where everyone plays the exact same obstacle course each day.
What it does
The Vault: Getaway is a daily-seeded heist runner. Every player, every day, faces the identical procedurally generated obstacle sequence — so the leaderboard is a real, fair competition, not just personal best-chasing. On top of that:
- Ghost Racer — a live silhouette replay of today's #1 score races alongside you in real time, updating automatically as new players take the lead.
- Community Death Markers — obstacles that have claimed several players today get a visible warning mark, so the track itself carries the scars of everyone who's attempted it before you.
- Daily Quest — a fresh daily challenge alongside pure score-chasing.
- Cosmetic Shop — unlockable character skins and scenery themes, earned through coins collected during runs.
How we built it
Built on Devvit Web with Phaser for the game rendering — physics, particle effects, and camera work all run through Phaser's Arcade Physics and Graphics/Texture pipeline. The backend runs on Reddit's Redis-backed storage, using date-keyed patterns to handle daily resets (leaderboard, quest, ghost replay, death markers) without needing complex cron logic for most of it.
The seeded-daily-consistency system uses a small deterministic PRNG seeded from the UTC date, so every player's obstacle sequence is identical without needing to transmit level data — just the date.
The Ghost Racer works by storing a lightweight replay of input events (jump timestamps) from the current #1 run, rather than raw position data — since obstacles are already deterministic from the daily seed, replaying those inputs against the same seed reproduces the exact run.
Challenges we ran into
- Finding the right core loop. Our first version was a daily combination-cracking puzzle with one guess per day. It was mechanically interesting but didn't have a satisfying single-session loop — we made the deliberate call to rebuild around real-time, replayable action instead, which we think made the game much stronger.
- Phaser scene lifecycle bugs. Reused Phaser scenes needed explicit cleanup (removing listeners, destroying objects) between re-creations, or leftover objects from previous renders would visually overlap with new ones.
- Emoji glyph clipping. Phaser renders text objects to internal canvases sized off nominal font size, not actual glyph height — color emoji in our HUD were getting clipped at the top until we added explicit padding to each affected text style.
- Fair collision math. Swapping placeholder shapes for real character art meant carefully re-tuning hitboxes so the game didn't get harder just because the sprites got taller.
What we learned
Iterating on the actual core loop early — and being willing to rebuild it when it wasn't landing — mattered more than any individual feature. We also learned a lot about Phaser's internals (text rendering, scene lifecycle, physics body scaling) that made the later stages faster to build.
What's next
A rotating set of daily obstacle themes, community-submitted or voted-on scenery/obstacle types, and weekly leaderboards on top of the daily ones.
Built With
- devvit
- phaser.js
- react
- redis
- typescript
- vite
Log in or sign up for Devpost to join the conversation.