Inspiration

I sought to create a game that captures the daily challenge of Wordle or crosswords, but with a completely new mechanic that's instantly understandable.

DigWords is an answer to the question "What if Battleship met crosswords?". It matches up Battleship's tension of picking the right tile, and the payoff when you realise you're on the right track, with the language skill of a crossword.

What it does

DigWords is essentially a buried crossword - a daily puzzle where all players get the same 9×9 grid of buried tiles hiding five crossword-style words that share a theme (e.g. "Animals"). You're given the theme, each word's length, the letters used and one revealed tile that's part of a valid word to get started.

Tap a tile to "dig" it and reveal the letter underneath. Words only run left-to-right or top-to-bottom, and cross each other just like a crossword, so a hit gives you information about where else to probe. When every cell of a word is dug, the word is revealed and shown at the top. Players aim for the lowest score - i.e. the smallest number of tiles dug that aren't part of the 5 words.

Beyond the core loop: a daily leaderboard (ties broken by completion time) and a streak counter for consecutive days completed.

How we built it

  • Frontend: React & Tailwind CSS, using Devvit's webview.
  • Backend: Hono, on Devvit's webserver, with Redis for persistence.
  • Anti-cheat: the word bank and placement algorithm are server-side. The solved grid is scrambled by letter-shift before sending to the client, so the client can't easily read the answers out of a network request.
  • AI assistance: Codebase assisted with Claude Code using Playwright MCP for a semi-automated iteration loop, plus Gemini in combination with Figma for asset generation.

Challenges we ran into

  • The crossword algorithm took a lot of iteration Generating a puzzle with words that cross over, while avoid two parallel words running adjacent to each other, or one ending and the next one starting with the same letter, proved particularly difficult. The rules had to be clarified through a lot of manual testing to ensure all 5 words cross with no orphaned words, that any cross must be between 2 perpendicular words and no 2 words can run parallel in adjacent lines.
  • Balancing difficulty I initially had a smaller grid and showed the word list up front, but this made the game too simple to solve in exactly the minimum tile count. But with no hints at all, it became a random stab-in-the-dark game. The current version shows the lengths of remaining words, plus the remaining letters to find, and the words' theme, which gives enough clues to favour a skilled player without being too difficult for anyone to eventually solve.
  • Trade off in anti-cheat Waiting on a server round-trip before revealing a tapped tile's letter felt laggy, so now the server sends a locally-decodable, letter-shifted copy of the full solved grid with a fresh per-run seed, letting the client reveal instantly while the server still retains authority over score and completion. It's not bulletproof, but it's a worthwhile tradeoff to improve game feel.

Accomplishments that we're proud of

  • A genuinely new word puzzle Having played lots of Reddit's daily games, plus others like the New York Times' puzzles, I believe DigWords is a completely unique word game mechanic that's easy to understand while still being skillful and engaging.
  • Visuals feel great While I'm no artist, a combination of the strong theming, the tile art and the animation "pops" on digging or completing a word make gameplay feel very satisfying.

What we learned

  • Devvit's splash/inline surface has hard, silent constraints (fixed viewport, no scroll) that are easy to violate without any error telling you so — build and test against the real constraint from day one rather than a browser window that happens to be tall enough.
  • "Simple to state" puzzle-validity rules (like words can only touch if they actually cross) can hide a surprising number of edge cases in a generative/backtracking context — worth writing the rule down precisely and testing it exhaustively rather than trusting a first implementation.
  • Randomized correctness sweeps (thousands of simulated days) caught generation edge cases that manual playtesting of a handful of puzzles never would have surfaced.
  • Server-authoritative design and perceived responsiveness are sometimes in genuine tension, and the right answer isn't always "always trust the server for everything" — it's picking, deliberately and narrowly, exactly which trade-off you're willing to make and documenting why.

What's next for DigWords

  • Create-your-own-puzzle (UGC) Allow players to create their own crossword puzzles, fill in the rest of the grid with random letters and publish these as new playable puzzles.
  • Varying difficulty levels: Another Reddit game I've made, Donut Stacks, has 2 levels of daily challenge at different difficulty. This deepends the daily challenge experience and widens its potential audience. I didn't have time to build the UX for that in DigWords, but I'd like to expand to have varying difficulty daily puzzles. This would involve different board sizes and word lengths.
  • Digging power-ups For engaged players, having single-use power-ups per game session would add more strategic depth, such as being able to reveal a whole row for the cost of 1 dig.

Built With

Share this project:

Updates

Submission history