Inspiration

I kept coming back to Wordle for one reason: a single shared puzzle every day that everyone solves at the same time. That "the whole world is on the same thing today" feeling is the real hook, not the word game itself. I wanted to bring that to Reddit, but turn it into a race, and let the community build it.

Taxi routing clicked instantly. Everyone understands "grab the passenger, drop them off, fastest wins." It's a fresh daily puzzle rather than another arcade clone or platformer. And a route is something a player can draw, which meant the community could feed the game its own content.

What it does

Every day, the whole subreddit gets the same fare. You drive to the green pickup, then the red dropoff, and your time lands on the daily leaderboard. Show up each day to keep a streak alive.

You're never just racing the clock, either. Ghost racing replays the current best run as a faint car you chase in real time, so "beat this time" happens during the drive — you watch yourself gain or lose ground against the time to beat instead of finding out only on the results screen.

But the real loop is that players make the fares. You draw a pickup and drop-off anywhere on the city map, name the passenger, and submit it. The subreddit upvotes its favorites, and each morning the top-voted fare automatically becomes that day's challenge, with the creator's name on it. The game refills itself and never runs out of content.

How I built it

Pick & Go runs on Devvit Web with Phaser for the game. The client is a set of Phaser scenes (menu, drive, create-fare, results); the server is Hono routes over Redis and the Reddit API, with a scheduled job that rotates the fare every morning. The full daily cycle — close voting, pick a winner, post a fresh challenge, runs itself with no manual work after install.

Challenges I ran into

The two hardest problems weren't the driving. They were fairness and trust.

Making the vote fair. I wanted the vote itself to be Reddit comment upvotes, as native to the platform as it gets. But comments accumulate votes over time, so a fare posted in the morning would bury one posted at night regardless of which was better. "Best fare" would quietly come to mean "earliest fare." The fix was a fixed 24-hour voting window: every candidate goes up at the same moment and competes over the same day. That forced a pipeline where a fare is submitted one day, voted on the next, and played the day after — a built-in delay that turned out to be the price of fairness, not a bug.

Only letting players pick drivable spots. A fare is broken if the pickup or dropoff lands on water or a building, or if the two points don't connect by road. Validating all of that per submission sounded expensive. But the city map is static, so I precompute one set at startup: every tile that is both drivable and reachable from the car's spawn. After that, checking a fare becomes a single membership test that simultaneously guarantees the spot is on a road, reachable, and connected to the other point. One insight collapsed three checks into one.

There were smaller dragons, too. Reddit deliberately fuzzes vote counts, so I lean on a deterministic tiebreaker instead of trusting exact numbers in close races. Player-submitted passenger names are public, so they need moderation. And Devvit apps don't run in a local browser, Redis, the scheduler, and the Reddit API all live on Reddit's servers, so I iterated entirely through playtest builds on a private test sub.

What I learned

The biggest lesson: retention is a design problem, not a feature you bolt on. A leaderboard, a streak, and a daily reset only do their job if every screen quietly points the player toward "one more run" or "come back tomorrow." I ended up treating the results screen as a motivation engine — leading with how close you are to the next rank — rather than a static scoreboard. Ghost racing came out of the same instinct: pull that "one more run" pressure out of the results screen and into the drive itself, so you're chasing the time to beat the entire way.

I also learned how much subtlety hides inside something as simple as "let people vote." Choosing comment upvotes as the source of truth meant trading away exact counts and one-vote-per-person in exchange for authenticity. That was a real tradeoff, not a free win, and naming it honestly made the design better.

What's next for Pick & Go

The bigger vision is a monthly fare economy layered over the daily race. When you create a fare, you also set its price, the meter on the ride, and that price is both your reward and your risk. Win the day's vote, and you bank that price as points toward a monthly leaderboard; overprice the route, and voters simply pick a fairer fare instead, and you earn nothing. The ballot already shows each fare's distance and difficulty, so the community has a built-in yardstick: a short, trivial trip charging top dollar reads as greedy, while a long, bridge-crossing haul earns it. No pricing rules engine required — the upvotes enforce a fair norm on their own. And because exactly one fare wins per day, points stay scarce; the monthly crown goes to whoever keeps designing fares the subreddit actually wants, fairly priced, day after day. It adds a second, month-long loop built on a completely different skill from driving fast, not racing the route, but reading the room.

After that: difficulty tiers, named city districts so a fare reads as "Downtown → Airport," and a shareable, spoiler-free daily result to pull more of the subreddit into the loop.

Share this project:

Updates

posted an update —

Version 0.0.28 is now approved by Reddit and live! It includes the fixes from the previous review: shared comments now post as your own account (instead of the bot) while keeping your stats flair, and the daily-ballot issue has also been resolved.

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

posted an update —

A new version is in review with Reddit — it fixes share comments so everyone (not just mods) posts as themselves with their stats flair, plus a daily-ballot fix. It'll go live once Reddit reapproves the app.

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

Submission history