Inspiration
Reddit's whole thing is that the community makes the content. Most "community" games just bolt a leaderboard onto a single-player loop and call it a day. We wanted a game where the community doesn't just play the level — it builds the level. Mini-golf was the obvious fit: everyone already knows the physics, one hole is a perfect one-day unit of content, and a bad course design is instantly, hilariously obvious to everyone who plays it.
What it does
Putt Together posts one mini-golf hole to the subreddit every day. You get one scored attempt — drag the ball back like a slingshot, let go, and try to sink it in six strokes or fewer. Walls bounce, bumpers punch, sand slows you down, water sends you back to your last shot. Finish under par, climb the daily leaderboard, keep your streak alive.
Here's the hook: you can also design tomorrow's hole. A built-in level editor lets anyone place walls, bumpers, sand, water, the tee, and the cup. You have to finish your own course in six strokes or fewer before the submit button even unlocks, so nobody can troll the sub with an impossible hole. The subreddit votes on submissions, and at midnight the winning design becomes the next daily post — with the designer's username right there in the title.
How we built it
Devvit Web (Reddit's app platform) with a Hono server and a Phaser 4 client. Redis holds levels, scores, streaks, submissions, and votes; a scheduled task handles the midnight rollover — finalize the vote, crown the winning design, create the new post. If nobody submitted a level, one of seven hand-built house holes runs instead so the sub never goes empty.
The game itself is arcade physics: a circular ball body, wall restitution, drag zones for sand, a reset zone for water, and a speed gate on the cup so a ball moving too fast skims past instead of dropping in. The level editor and the vote gallery (with rendered thumbnails of every submission) are Phaser scenes too. Every texture is drawn procedurally with Phaser Graphics and every sound is synthesized with WebAudio — there are no downloaded art or audio assets in the app.
Cheating is handled entirely server-side: one scored attempt per user per day, level geometry is re-validated on the server no matter what the client sends, and one vote per user per day (revoting just moves your vote).
Challenges we ran into
The physics tuning nearly killed the whole submission. Our first pass at the putt power and ball drag made max-power shots travel only ~160px — which meant most holes were mathematically impossible to finish in six strokes. We only caught it because we insisted on recording real gameplay for the demo video instead of just eyeballing the code, and takes kept coming back "did not finish." Recalibrated the power multiplier and drag until travel distance was actually playable, then added a failsafe for a bug where the ball could get stuck jittering against a wall forever instead of coming to rest.
Getting believable automated playtests was its own fight — Reddit's bot detection blocks headless browsers from loading real posts, so we built a local mock server that serves the exact same compiled client bundle against fake API responses, and drove the Phaser scene directly through a debug handle since synthetic mouse events don't reliably reach Phaser's input system.
Accomplishments that we're proud of
Getting the full loop working end to end in one sitting: play → score → streak → design → vote → new post, with zero external assets and a server that doesn't trust the client for anything that matters. Also proud we caught the unfinishable-hole bug before anyone else did — that one would have quietly killed the whole submission on day one.
What we learned
Devvit Web's Redis + scheduler combo is enough to build a genuinely stateful daily game with no separate backend infra. And no amount of code review replaces actually playing your own game — the worst bug we shipped was invisible in the source and only showed up as "the ball won't go in the hole."
What's next for Putt Together
Seasonal hole themes (holiday courses, subreddit-specific skins), a weekly "hole of the week" replay mode voted from the day's designs, and letting designers add short trash-talk captions to their submissions so the vote gallery has more personality.
Built With
- devvit
- hono
- phaser.js
- redis
- typescript
Log in or sign up for Devpost to join the conversation.