Inspiration
Wordle proved a shared daily puzzle turns strangers into a community. GeoGuessr proved deduction from partial signals is fun on its own. Reddit is the largest searchable archive on the internet, but nobody had made searching it the game. Capture the Post combines the three: one hidden post, one riddle, everyone hunting the same target.
What it does
Every UTC day the server selects one real public Reddit post and presents a poetic riddle describing it without searchable details. Players search Reddit and submit post URLs. Each wrong guess costs 5 points but returns Wordle-style comparison signals: community, author, date, format, score, comments, and title-word overlap, colored green, amber, or gray. Players can also spend points on clues, but information already learned from a guess disables the matching clue so nobody pays twice. There is no attempt limit; the score is whatever remains of the starting 100 points. Solver counts, streaks, and Daily/Weekly/Monthly rankings make each day a community event, and a copyable result lets players compare routes in the comments without spoiling the answer.
How we built it
It runs entirely inside a Reddit post as a Devvit Web app. A React client renders a single tall custom-post view and talks to a Hono server, which owns everything that matters: point balances, clue costs, guess validation, and persistence. Guessed posts are resolved live through the Reddit API and compared against the target's metadata. Redis stores attempts, purchased clues, guess history, streaks, and ranking records, with transactions guarding against double purchases and negative balances during rapid clicks. The daily target is chosen lazily by indexing a private curated pool with the days elapsed since launch, so rotation at 00:00 UTC needs no scheduler. Moderator tools validate the pool for removed, spam, or NSFW targets before a challenge goes live.
Challenges we ran into
The hardest problem was information design, not code. A riddle must be solvable through search yet immune to pasting it into Google, so every riddle avoids title quotes, subreddit names, and exact metadata. The embedded Devvit webview cannot reliably open a browser tab, which broke our original clickable guess history; submitted URLs became static evidence text instead. Concurrency was the other fight: fast clicking and parallel sessions could buy the same clue twice or push a balance negative until Redis transactions made the server fully authoritative. Finally, keeping the answer out of the UI while still letting players discuss it in comments took several iterations of the shareable result format.
Accomplishments that we're proud of
Wrong guesses are the core mechanic, not a punishment. Turning each failed submission into structured comparison signals means every guess buys information, and the clue-disabling rule ("Known from guess") keeps the economy honest. The server-owned point system held up under concurrent abuse testing. And the brutalist redesign in 0.0.10 gave the game a visual identity that reads clearly inside a cramped inline post.
What we learned
Building inside someone else's platform means designing around constraints instead of through them: no reliable outbound links, strict data expectations, one inline surface. Lazy deterministic selection beats scheduled jobs for daily rotation. Riddle writing turned out to be content design as demanding as the engineering, and bounded retention (45 days for gameplay, 400 for rankings) taught us to plan data lifecycle from the start rather than bolt it on.
What's next for Capture The Post
A larger curated pool, then community-submitted riddles with moderator review. After that: difficulty tiers, a no-clue hard mode, achievements for streaks and low-guess captures, playable archives of past days, and subreddit-specific editions where communities hunt targets from their own history.
Built With
- devvit
- hono
- node.js
- react
- redis
- typescript
Log in or sign up for Devpost to join the conversation.