Inspiration

We wanted a daily puzzle that belonged inside a Reddit post. Everyone gets the same problem, solves it alone, then compares results with the community. The visual direction came from old intelligence desks and red wax seals. A typewriter made the answer field feel like part of the story instead of a normal form. Keeping the puzzle to one missing word made it short enough for a daily habit while leaving room for an actual decoding step.

What it does

Enigma Desk publishes one secret message every day at 00:00 UTC. Players see an encrypted sentence beside a decoded copy with one word missing. They work out the cipher, type the missing word, and try to finish as quickly as possible. The stopwatch has no time limit. Completed runs receive a verified time, exact daily rank, correction count, and streak. Players can open recent leaderboards, share their submission, post a score comment, and join the subreddit without leaving the game. Moderators can schedule custom puzzles through Reddit's mod menu. If nothing is scheduled, the game generates that day's message from five sentence structures and four cipher families.

How we built it

The client uses TypeScript, Vite, and Phaser inside a Devvit Web post. The server runs on Devvit's Node.js environment with Hono and tRPC. Redis stores daily puzzles, run tokens, leaderboard entries, streaks, and the canonical post for each date. Shared code handles cipher generation and validation so the client and server follow the same rules. When a daily post is created, its puzzle is frozen in Redis. Editing the moderator backlog later cannot change a puzzle people have already played. Submission effects are loaded only when needed, which keeps the first load lighter inside Reddit's mobile app. Reddit Realtime carries activity updates without sending the answer to other clients.

Challenges we ran into

Mobile behavior inside Reddit's iframe took the most iteration. The available height changes between feed, expanded, and in-app views. The on-screen keyboard also had a habit of closing after the answer field received focus. We had to tighten the layout, move instructions to their own page, and handle input focus carefully. Fair timing was another problem. A client-only stopwatch is easy to manipulate, so each competitive run receives a server-issued start token. The server rejects reused tokens, wrong answers, impossible timing, and invalid correction counts. The daily puzzle system also had to avoid duplicate posts and changing answers. Scheduled puzzles override generation for their date, but both paths still feed one frozen puzzle and one canonical Reddit post.

Accomplishments that we're proud of

The game now feels complete inside a single Reddit post. It has a proper solve loop, mobile input, a competitive results screen, recent leaderboards, moderator tools, and Reddit-native sharing. We also replaced a short fallback list with deterministic procedural generation. Its contract test checks 100,000 consecutive dates and confirms that every message is unique, valid, and suitable for answer selection.

What we learned

Reddit's in-app browser needs different UI decisions from a normal website. Space is limited, keyboard behavior matters, and every asset added to the initial load is noticeable. We also learned that procedural content needs strict rules. Producing random sentences is easy. Producing the same valid puzzle for every player on a given date, then preserving it after publication, takes much more care.

What's next for enigma-desk

Next, we want to add more cipher families and sentence structures without making the puzzles harder to read. We also want better player history, weekly leaderboards, and an archive where finished daily messages can be reviewed without affecting the current competition. The moderator queue will get a clearer calendar view and bulk scheduling. On the competitive side, we plan to keep tightening server validation as we see how people actually play.

Built With

Share this project:

Updates

Submission history