Inspiration - Reddit communities already organise around daily rituals — Wordle threads, daily discussion posts, prediction games. We wanted to build something that fits that rhythm: a game short enough to finish in under a minute, fair enough to compare scores across a community, and deep enough to keep people coming back. The "hook" is that every player on a given day plays the exact same round, seeded from the UTC date, so a score posted in a comment is a real claim anyone can verify by playing themselves. The secondary hook came from thinking about what makes a number-recognition game interesting beyond pure speed. Two mechanics emerged: an Impostor figure that briefly swaps its label to misdirect you, and a Ghost Chain that reshuffles the upcoming target to reward players who read patterns rather than just react.

What it does - StickTag Relay is a Devvit Web Interactive Post with two play modes:

  - Daily Challenge — a deterministic round seeded from the UTC calendar date. Every player in the subreddit sees the same stick figures in the same positions with the same flagged-number sequence. Scores are submitted to a server-side leaderboard and compared in real time.

Core mechanics:

Combo multiplier — consecutive correct taps scale points up to 4×

Hyper Mode — at combo ≥ 10, figures start moving at 1.5× speed

Impostor figure — one figure (visible by orange outline and wobble) swaps its label with the current target 1.5 s after each correct tap, then restores after 1 s

Ghost Chain — 30% chance per correct tag that the sequence is quietly reordered to place a mathematical neighbour of the just-tagged number next; the HUD shows a subtle hint (👻 chain → N?) for players who learn to read it

Daily leaderboard — top 25 scores per subreddit per UTC day, shown on the Game Over screen

Streaks and flair — consecutive daily plays earn Reddit flair at 3, 7, 14, and 30-day milestones

Community Goal — the subreddit's cumulative correct tag count races toward a shared target that scales up each time it is reached

Quick Practice — a randomly seeded round for warming up or experimenting with strategy. No leaderboard entry, no streak effect.

How we built it - Stack is entirely within Reddit's Devvit Web platform:

  ### Client — Phaser 4 running inside a Devvit Web expanded view (game-daily.html / game-practice.html). Pure TypeScript throughout. A lightweight splash page (splash.html) serves as the inline feed preview with no Phaser dependency, keeping initial load under 2 seconds.
### Server — Hono on Devvit's serverless Node.js v22 runtime. Handles seed generation, player stats, leaderboard writes, community goal increments, streak and flair logic, and a daily summary comment trigger.

### Persistence — Devvit Redis for all game state: player hashes, sorted set leaderboards, community counters, daily seed cache, and idempotency guards.

Challenges we ran into - Cross-iframe state — requestExpandedMode opens the game in a separate sandboxed iframe. sessionStorage and URL parameters don't cross that boundary the way they do in a normal browser. Passing mode=daily vs mode=practice required creating two separate HTML entry points (game-daily.html, game-practice.html) that each bake the mode into a window.GAME_MODE global before the Phaser bootstrap runs.

Accomplishments that we're proud of - A fully deterministic daily challenge: any two players anywhere in the world see identical gameplay for a given UTC date, making leaderboard scores genuinely comparable. Two complementary mechanics — Impostor and Ghost Chain — that add strategic depth without complicating the controls. The game is still just "tap the right number," but knowing when to hesitate and when to predict creates a skill ceiling that pure reaction speed does not.

What we learned - Devvit Web's iframe sandboxing is stricter than a typical web view. Anything that relies on shared browser storage between the inline view and the expanded view needs to be redesigned around entry-point separation or postMessage patterns. Phaser 4's scene lifecycle (init → create → update → shutdown) maps cleanly onto the Devvit round lifecycle, but the Phaser logo default splash is baked into the template assets and will show if asset paths are wrong — worth checking early.

What's next for StickTag Relay - Weekly tournament mode — a special seed announced at the start of each ISO week, with a separate leaderboard and a unique badge for the top 3 finishers

### Cosmetic unlocks — stick figure colour themes and animated expressions unlocked at level milestones, stored in player Redis hashes ### Spectator mode — a read-only view that replays the daily round in real time for players who want to watch before committing to a score

Accessibility improvements — high-contrast label mode, larger tap targets at low-vision settings, and reduced-motion option that replaces Hyper Mode movement with a colour flash

Push notification streaks — opt-in daily reminder via Devvit's notification API when a player's streak is at risk of breaking

Cross-subreddit leaderboard — an opt-in aggregate that lets communities compare their top scores for the same daily seed

Built With

  • devvitweb
  • hono
  • phaser4
  • typescript6
  • vite8
Share this project:

Updates

Submission history