Project name: Putt Together
One endless mini-golf course, built hole by hole by the community.
Inspiration
The best Reddit games aren't games you play — they're games you add to. r/place wasn't fun because pixels are fun; it was fun because your pixel sat next to a million strangers' pixels. We wanted that feeling in a game with real mechanics: what if a mini-golf course never ended, because every player who beat it could extend it?
What it does
Putt Together is an endless community mini-golf course living inside a Reddit post.
- Play the chain of holes other redditors designed. Every hole shows the course record and a ghost replay — the record holder's actual shots racing beside your ball as a translucent named ball.
- Build the next hole in a tile editor: walls, sand traps, water hazards.
- The gate: you cannot publish a hole until you ace it yourself — one stroke, no exceptions. So every hole on the course is provably beatable, and the course stays fun forever with zero moderation.
- The economy: publishing pays more than playing, and creators earn royalties every time someone chases the record on their hole. Daily energy (10 scored runs) and streaks bring players back every day.
- The comment section plays too: new holes and broken records are announced as live comments on the post, and a daily scheduled comment spotlights the most contested hole.
How we built it
- Phaser 4 + TypeScript + Vite client inside a Devvit Web webview: three scenes (World map, Play, Build), all graphics drawn procedurally — zero image assets, all sound synthesized with WebAudio.
- Hono server on Devvit Web with Redis for holes, records, ghost data, and per-player state; scheduler for the daily community comment; Reddit API for record-break announcements.
- One deterministic physics engine, shared by client and server
(
src/shared/physics.ts). The client uses it to animate; the server re-runs every submitted run through the same simulation. The client never reports a score — only shot vectors. If the math doesn't sink the ball, the score doesn't exist. Cheating is physically impossible. - Ghost replays cost almost nothing to store: because physics is deterministic, a full replay is just the list of shot vectors, re-simulated on demand.
- The nine starter holes were generated by a brute-force solver that fires thousands of angle/power combinations through the real engine until it finds a genuine one-stroke solution — the seed holes obey the same ace-to-publish law as the players. (Two of our first nine designs had no possible ace. The solver rejected them. The gate works.)
Challenges we ran into
- Making the ace gate unfakeable. Client-side checks are worthless, so the publish request carries the creator's ace as shot vectors and the server re-simulates them against the exact layout. Deterministic fixed-timestep physics (with substepping so fast balls never tunnel through walls) made client and server agree to the pixel.
- Fun under scarcity. Hard daily limits could lock a curious visitor out. Our compromise: out of energy you can still play everything — you just stop scoring. Scarcity keeps the leaderboard honest without ever blocking anyone.
- Editor abuse. Impossible holes, buried cups, sealed tees — all rejected by layout validation plus the ace requirement. The community can't grief itself.
Accomplishments we're proud of
A complete self-sustaining loop — play, build, ace, publish, race ghosts, break records, earn royalties — inside a single Reddit post, where the content that keeps it alive tomorrow is made by the players of today.
What we learned
The hook isn't a mechanic, it's ownership. Play-testing made it obvious: finishing a hole is fine, but seeing a stranger fail to beat the record on your hole is the thing people come back for.
What's next
Weekly hole-building tournaments voted by comment upvotes, themed tile packs (ice, boosters, teleporters), hole-of-the-day pinned comments, and a world map that renders the course as one continuous scrolling landscape.
Built with
devvit · phaser · typescript · hono · redis · vite · webaudio
Urls
Built With
- devvit
- hono
- node.js
- phaser.js
- redis
- typescript
- vite
- webaudio

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