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;
    • hSetNX to 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

Share this project:

Updates

Submission history