Inspiration
Reddit already has everything a racing game needs: a feed for discovering content, upvotes for ranking it, comments for trash talk, and avatars for identity. Most games bolt a leaderboard onto a post. We wanted to flip it — what if the game content itself was made of Reddit posts? Every track someone builds becomes a real post, the community's votes decide which tracks are worth racing, and your lap time lives in the comment thread with everyone else's. The game doesn't sit on Reddit; it's built out of it.
What it does
DailySpeed is a 3D arcade racer that lives entirely inside Reddit posts.
- Build — an in-Reddit track editor: lay down road, ramps, oil slicks and boost pads, test-drive, then publish. Publishing doesn't save to a database — it calls submitCustomPost, so your track is a new Reddit post in the feed.
- Race — 3-2-1-GO countdown, drift, jumps, a chase helicopter cam, and a ghost of your own best lap to beat. Track owners' ghosts race you on their levels, complete with snoovatar nameplates.
- Discover — a level browser with New and Hot tabs, where Hot is ranked by the post's real Reddit score. Upvotes are the matchmaking algorithm.
- Daily Challenge — every midnight UTC, a scheduler picks a top-voted community track, pins it, and everyone races the same layout — against the current record-holder's actual recorded lap, replayed as a rival ghost.
- Hooks back into Reddit — finish times auto-post as comments on the track's thread, you can challenge any Redditor by username from the finish screen (they get a real Reddit mention), and snoovatars show up on every leaderboard.
- Garage — a coin economy with unlockable cars from race earnings.
How we built it
- Frontend: React 19 + Tailwind 4 + Vite for the shell (splash, garage, level browser), with a vanilla Three.js racing engine and track editor mounted in iframes. Kenney's CC0 voxel kits provide the cars and scenery.
- Backend: Devvit Web — a Hono API on Node 22, with Devvit Redis for storage: a hash per level, a leaderboard zset per track, a levels:new feed zset, and rate-limit keys.
- The glue: a shared track codec (src/shared/track-codec.ts) used by the editor, the server-side validation, and the racing engine — so a track means exactly the same thing everywhere.
- Reddit APIs: submitCustomPost for publishing, getPostById().score for Hot ranking and daily selection, comment submission (as the player, via runAs: USER) for lap times and challenges, and getSnoovatarUrl for avatars.
Challenges we ran into
Reddit's mobile webview was the real boss fight:
- One WebGL context. Mobile refuses to give a second WebGL context, so the editor's Play button silently died when the editor and game iframes were both alive. We had to guarantee only one 3D iframe exists at a time.
- Dropped postMessages. The mobile webview drops child→parent iframe postMessage calls, which killed loaders and buttons intermittently. We built a fallback transport over BroadcastChannel + localStorage.
- Stolen touch gestures. The webview hijacks pan gestures a few pixels in (pointercancel), so draggable UI needed raw non-passive touchmove listeners with preventDefault.
- Mobile GPU budgets. backdrop-filter blur over a live canvas tanked the frame rate; we ship a flat HUD on touch devices, capped pixel ratio, halved shadow maps, and throttled DOM writes during races.
- Trusting user content. Published tracks are validated server-side against the shared codec (loop validation, finish gates) so a hand-crafted payload can't break other players' races.
Also a fun non-technical one: we originally launched as "SnooSpeedway" and had to rebrand mid-hackathon after learning Devvit's IP rules — Snoo belongs to Reddit.
Accomplishments that we're proud of
- Levels as posts, upvotes as ranking — there's no in-app popularity metric anywhere; the community's actual voting decides what surfaces and what becomes the daily.
- The ghost pipeline — your best lap is recorded and replayed; the daily challenge resurrects the record-holder's real run as a rival everyone in the subreddit chases.
- It genuinely runs on phones — after the webview battles above, the full loop (build → publish → race → comment) works on Reddit mobile.
- A complete content flywheel — build, publish, vote, race, comment, challenge — with zero infrastructure outside Devvit.
What we learned
- Design with the platform, not on top of it. Once tracks became posts, discovery, ranking, notifications, and identity all came for free — the best features were the ones we didn't have to build.
- Reddit's mobile webview is its own runtime with its own rules; assume nothing that works on desktop survives contact with it.
- A single shared encoding between client, server, and engine eliminated an entire class of "works in the editor, breaks in the race" bugs.
What's next for DailySpeed - Arcade Racing
- Live multiplayer ghosts via Devvit realtime — race the people who are racing right now.
- Weekly tournaments — bracket posts where heat winners advance, run by the scheduler.
- More track toys — loops, banked corners, moving obstacles, and themed scenery kits.
- Deeper economy — spend coins on car liveries and editor cosmetics; maybe Devvit payments for supporter packs.
- Subreddit-as-league — any community can install the app and get its own hub, dailies, and champions.
Log in or sign up for Devpost to join the conversation.