Inspiration
Reddit's hackathon brief asked for a "hook" — not a literal fishing game, but retentive, replayable design. We kept coming back to the idea of a runner where the other racers on the track are not bots, but real recordings of real redditors. Every subreddit already has a history; we wanted a game where that history is visible while you play, not buried in a leaderboard tab.
What it does
Ghostline is a daily one-touch gauntlet. Everyone in the subreddit flies the exact same procedurally-generated course each day — hold to rise, release to fall, one thumb, no other controls. While you fly, you're racing the translucent ghosts of real players' best runs from today, recorded live as people play, not scripted or faked. Wherever you die, a gravestone bearing your username is planted right there on the course for the next runner to fly past. Come back tomorrow: a brand new seeded course, your personal streak on the line, and yesterday's top runner haunting the track as a golden ghost to dethrone.
How we built it
Phaser 4 running inside Devvit Web. The course itself is generated from a seed derived from the calendar date, shared identically between the client (for rendering/collision) and the server (for validating submitted runs) — so nobody can submit a run for a course that doesn't match today's date, and no assets need to be downloaded to reproduce it. Ghost replays are just arrays of y-positions sampled at a fixed world-distance interval, interpolated smoothly during playback. Redis holds the daily leaderboard, the ghost data, streaks, and gravestones. Every texture in the game is drawn at runtime with Phaser's Graphics API, so there's no art pipeline and the bundle stays tiny.
Challenges we ran into
Getting the physics to feel fair on a procedurally generated course was the hardest part — gates need to be reachable from wherever the previous gate could put you, so the generator does a constrained random walk instead of picking gaps independently. Keeping the ghost simulation perfectly in sync between client and server took a fixed-timestep step function shared by both sides.
Accomplishments that we're proud of
Zero downloaded art assets and instant load, while still having gravestones, ghosts, and a daily-seeded course that feels different every day.
What we learned
Small, focused daily content beats a large single-session game for retention — the entire level is generated from one integer, and that's enough content for the whole game, forever, one per day.
What's next for Ghostline
Weekly "greatest hits" ghosts pulled from top runs across the week, and a lightweight cosmetic system so returning streak-holders can customize their ghost's trail color.
Built With
- 4
- developer
- devvit
- hono
- phaser.js
- redis
- typescript
- web
Log in or sign up for Devpost to join the conversation.