Inspiration

Every sports season, TV finale, or esports tournament, Reddit communities explode with "who do you think wins?" threads — but there's no way to track who was right. I wanted to build something that turns those casual predictions into a real competitive experience, directly inside Reddit without leaving the feed.

What it does

LeagueCraft is a fully generic fantasy picks and prediction league tool for Reddit. Moderators create a league with custom questions and options — NFL matchups, Survivor boot order, Oscar winners, F1 podiums, anything — and community members submit their picks before the deadline. After the round closes, mods mark correct answers and the app automatically scores every player and updates the leaderboard.

Key features:

  • Unlimited topics — mods define questions, options, and point values for any fandom
  • Round-based competition — lock picks, score rounds, and post standings with one click
  • Live vote distribution — after submitting, players see how everyone else voted
  • Leaderboard — cumulative points across all rounds, updated automatically after scoring
  • Past results — players can review every round and see which picks were right or wrong
  • Premium tier — 25 Gold unlocks unlimited picks and a 1.5× point multiplier per round

How I built it

The app runs on Devvit with a React + TypeScript WebView for the full game UI. The backend uses tRPC over Hono for type-safe client/server communication, with all state persisted in Redis via Devvit's KV store. The inline post card is a lightweight splash that immediately opens expanded mode — keeping the in-feed experience clean and Reddit-native.

The architecture is split cleanly:

  • server/core/league.ts — all game logic (rounds, picks, scoring, leaderboard)
  • server/routes/ — tRPC router + Hono payments webhook
  • client/components/ — tabbed UI: Picks, Leaderboard, Results, Mod panel

Challenges

The biggest challenge was payments integration — wiring up the Gold premium upgrade so it's seamless inside the post without breaking the picks flow. Reddit's payment callbacks are server-side webhooks, so I had to carefully sync premium status into Redis and reflect it immediately in the client.

The second challenge was Reddit's inline scroll trap policy — any overflow: scroll in the inline web view blocks native Reddit scroll gestures. I had to ensure the inline splash is a completely static, non-scrollable card, with all interactive content gated behind expanded mode.

What I learned

  • Devvit's tRPC + Hono pattern is extremely ergonomic for type-safe full-stack Reddit apps
  • Designing for two distinct view modes (inline splash vs. expanded game) requires careful separation of concerns from the start
  • Reddit Gold payments work well as a soft paywall — players who are invested enough to spend Gold become your most engaged users

What's next

  • Scheduled round locking (auto-lock at a set time without mod action)
  • Push notifications when a round is scored
  • Multi-round season summaries with winner announcement posts

Built With

Share this project:

Updates