๐ก Inspiration
We fell in love with the Rooster Teeth "3D mini-golf" chaos feeling โ the joy isn't a clean putt, it's watching physics betray everyone at once. Reddit already has turn-based golf, so we went the other way: real-time, slingshot, chaos-physics mini-golf that lives inside a post.
๐ฎ What it does
Open the post, drag to aim, release to putt (pull opposite your target). Then:
- A shared daily โ the whole community plays the same hole with the same wild mutator (Ice Rink, Super Bounce, Poolโฆ), computed C day so everyone's in sync with zero coordination.
- One leaderboard, ranked by strokes *the sortable score:
$$\text{score} = \text{strokes}\times 10^{6}
- Streaks to pull you back tomorrow.
- Build your own โ an in-app editor to design, submit, upvote, and play community courses.
๐ ๏ธ How we built it
- Devvit Web + Phaser 4 + TypeScript, a Hono server, and Redis for state.
- A custom top-down physics engine โ slill banks ($\varepsilon = 0.9$), per-frame friction, and a mechanic library that all reflect + interact: power/elastic bumpers, decoupled portals, ts, ice/sand/water, boost pads, and breakable walls.
- Determinism-first: portals, breakablesiming are pure functions of the shot + load time, so the same inputs always reproduce โ the engine is replay-ready by construction.
- Redis, siloed per subreddit: sorted sets for the leaderboard, keyed strings for streaks, and a JSON-per-course index for UGC (submit / delete).
- An empirical playtest harness we're weirdly proud of: Playwright drives the real game engine headlessly and fires fans of shots vability, ace-rate, forgiveness, and route diversity** โ so holes were tuned from data, not vibes.
๐ What we learned
Top-down golf with no gravity is a completely different design space. The ball bank-and-settles instead of being guided, ow arrival โ so a far cup is nearly unsinkable straight-on, and "just add a backstop" doesn't save you. We had to re-derive mini-golf from first principles: w, dogleg, windmill, gateway, carry) survive our physics, and which (ramps, loops, slopes) simply don't.
๐ง Challenges we faced
- No-gravity sink physics. Banked/lag putts wouldn't drop. We added a gentle "gutter" pull toward a nearby slow ball โ then di like a magnet, and spent real effort measuring the effective catch width to tune it back to "cup, not magnet."
- Water is brutal here. A splash resets iggers at any speed โ so a long water channel is nearly impossible to thread. Our risk/reward "gamble" hole only became fair after we shrank the crossing t
- Timing can't be tuned headlessly. Windmills only spin in real time, so on-device testing caught things the harness couldn't โ incluots into a hazard for an unfair double-penalty.
- A sneaky harness bug. Our probe wasn'tween simulated shots, silently capping every scan at one sink and invalidating a batch of results until we caught it.
- No native cross-community state. Redisthe leaderboard is a per-community daily board โ a deliberate, reliable scope instead of chasing external infra.
Built With
- devvit
- hono
- phaser.js
- redis
- typescript
- vite

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