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.
Share this project:

Updates

Submission history