Inspiration

Somewhere in Germany, someone once organized real Shopping Cart Returning Championship. I watched that and thought: this deserves a World Cup. On Reddit. With national teams, sabotage votes, and a commentator who takes it far too seriously.

What it does

Parking Lot Curling is a daily community physics game. Every day is one round of a 7-day knockout World Cup between 8 national teams, each pushing a cart with personality (Spain's Three-Melon Special, France's Possessed Wheel…).

You pick a side and take one shot per day: drag back anywhere like a slingshot, release, and your cart rattles across a frozen parking lot toward a curling house painted on the asphalt, drifting with its cursed wheel, bouncing off traffic cones, splashing through mop water while the crowd holds its breath in dramatic slow-mo. Closest to the bullseye scores most; your points feed your team's average, and the winning team advances the bracket.

The hook is the ritual: one shot a day makes every throw matter, streaks reward coming back, and the bracket gives each day a stake ("Quarterfinal 3: USA vs Spain"). After your shot you vote tomorrow's chaos, a community modifier (locked left wheel, aisle-wide yogurt spill, the "Excuse Me" Lady), that changes the track for everyone the next day. Every result is auto-commented on the post with absurd sports-broadcast narration, so the comment section becomes the stadium.

How I built it

Devvit Web + Phaser 4 + Redis + TypeScript. The simulation is fully deterministic (seeded per user/day): the client animates the exact trajectory the server verifies by re-simulating, so scores can't be spoofed.

A Devvit scheduler posts each day's round automatically at 07:00 UTC and pins a live standings comment. The daily track, modifiers, tournament schedule and narration are all derived deterministically from the date, with real community scores layered over fixture data, the bracket always renders, even on day one. Phaser renders the night parking-lot stadium: trajectory playback with floating chaos events, slow-mo camera drama, particles, skid marks, and procedural textures with AI-assisted, style-anchored sprites on top.

Challenges I ran into

  • Trust without a physics server. I wanted juicy client-side animation but tamper-proof scores. Solution: a seeded, fully deterministic simulation that the server re-runs from the same inputs, if the replayed result doesn't match, the score is rejected.
  • Making one post feel like a season. A single interactive post is ephemeral; a World Cup needs continuity. I derive the whole tournament state from the date + Redis, so any post from any day renders the correct round, bracket and reigning champion.
  • Demo resilience. Hackathon demos die in the worst moment, so the whole game also runs on local fixture data if the server is unreachable, the bracket, teams and narration never break.
  • Physics that's funny, not realistic. Tuning drift, friction and chaos events until a shopping cart felt like a curling stone with a drinking problem took more iterations than any other feature.

Accomplishments that I'm proud of

  • A complete daily loop live on Reddit: scheduled posts, one-shot-a-day play, streaks, community sabotage votes, auto-commented results and a 7-day tournament that restarts itself.
  • Deterministic replay verification: smooth 60fps Phaser animation on the client, zero-trust scoring on the server.
  • Seven visually distinct tracks, cart "personalities", a scouting report before each shot, and a commentator voice I'd hire in real life.
  • It's genuinely funny. Playtesters came back the next day without being asked, the streak did its job.

What I learned

  • Devvit Web is at its best when you lean into Reddit's rhythms: daily posts, comments as the stadium, votes as game input.
  • Determinism is a superpower for community games: it gives you cheap anti-cheat, reliable demos and reproducible bugs, all from one design decision.
  • Absurd humor needs serious polish, the joke only lands if the slow-mo, particles and narration are timed like a real sports broadcast.
  • One constrained shot per day beats unlimited throws: scarcity is the retention mechanic.

What's next for Parking Lot Curling

Real subreddit-vs-subreddit leagues, seasonal trophies in user flair, and community-submitted modifiers (the yogurt was only the beginning).

Share this project:

Updates