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

Share this project:

Updates