Inspiration
Daily games work best when everyone faces the same small challenge and then compares notes. We wanted a puzzle that takes about a minute to play and feels great to share. It also needed real depth: there is always a slightly better line than the one you found.
What it does
- Each day at 00:00 UTC, every player gets the same 7×7 lattice. It has one light source, crystals, stone walls and a few fixed mirrors.
- You may place up to 4 mirrors (
/or\). The beam updates live as you tap, and crystals glow when the light passes through them. - You get one lock-in per day. The server re-traces the beam to verify the score, so nobody can fake one.
- Par is the best possible result, computed by a solver, so players know when they've found the optimal route.
- Community glow: every lock-in adds crystals to a shared daily meter, a small collective goal for the subreddit.
- Daily leaderboard and streaks for the "one more day" loop. Copy result gives a spoiler-free emoji line (◆◆◆◇◇◇◇) to paste in the comments.
- A scheduler posts the new lattice automatically every day.
How to play
Tap Play today's lattice. Tap an empty cell to cycle / → \ → empty. Route the beam through as many crystals as you can with at most 4 mirrors, then Lock in. Fewer mirrors break ties.
How we built it
- Devvit Web with an inline launch screen and an expanded game view, built with React 19, Tailwind 4 and Vite.
- A Hono server on Devvit with Redis:
- sorted sets for the daily leaderboards;
- hashes for results, streaks and community counters;
hSetNXto enforce one locked submission per user per day.
- One shared, pure-TypeScript puzzle module used by both client and server. It contains:
- a seeded PRNG (mulberry32) that turns the date into the board;
- a beam tracer with loop detection;
- a pruned search solver for par that only branches on cells along the current beam path;
- a generator that rejects boards that are trivial or unsolvable (par ≥ 3, and mirrors must be needed).
- Unit tests check determinism, a month of generated boards and anti-cheat validation.
Challenges we ran into
Keeping boards interesting every day. Pure random boards were sometimes trivial or impossible, so the generator re-salts until the solver confirms a board that actually needs mirrors.
What's next
- Weekly themes, such as prisms that split the beam.
- A "ghost beam" replay of the day's top route after the day closes.
- Per-subreddit leagues.
Built With
- devvit
- hono
- react
- redis
- tailwindcss
- typescript
- vite