Rock-paper-scissors with numbers — and a daily puzzle where both hands are face up.




The rules take ten seconds: fire beats ice, ice beats water, water beats fire; same type, higher number wins. That is all of it.
What makes it hard is that both hands are face up. You can see every card your opponent holds, and they can see yours. Nobody is hiding anything, so exactly one job is left — read the order, and decide which round you are willing to lose.
One board a day, the same for everyone, one submission. Their five cards are laid out in a fixed order and you decide how to answer them. The result is shared as five squares and a score: you share the grid, not the answer.
The ladder runs 100 levels across seventeen personalities — the Mirror copies the type you last played, the Miser never wastes a seven, the Sphinx will not repeat a value. Climbing does not make the opponent stronger, it makes the board harder: a value gets banned, a specific card is removed, a clock goes on the round, or the opponent is dealt extra cards. The gauntlet is a separate mode — a run where your cards are the clock, and a win streak brings a used card back into the pool. For a friend duel you create a room and share a six digit code.
The game is written in React Native with Expo. The rules, the match state machine and the solver sit in their own pure TypeScript packages; the server is Fastify and PostgreSQL, and daily pool generation and scoring run there.
Every daily board is filtered so that a perfect sweep is impossible and exactly one ordering is best. A solver that solves the game by backward induction does that filtering — each candidate board is solved, and the ones that fail the condition are thrown away.
The point is to make sure the interesting question is never “can I win them all” but “which round do I give away”. A randomly generated board cannot guarantee that.
The personalities are behaviour patterns rather than difficulty steps: “never waste a seven”, “lead with fire”, “never repeat a value”. Beating one is about noticing the habit, not about reacting faster. The difficulty comes from the constraint placed on the board rather than from the opponent’s reflexes — the same personality on a board where sevens are banned is a completely different problem.
No card packs, no loot boxes, no second currency, no real-money prizes. A one-time Pro unlock removes ads and opens the full analysis of any hand with its exact optimal line, the daily archive, unlimited puzzles and your statistics.
Every daily board goes through the solver. A random board is sometimes trivial and sometimes unwinnable, and both break the daily format, because everyone plays the same board and gets one shot at it.
The cost is that generation is not cheap — each candidate board has to be solved. What you buy with it is a guarantee that every day is interesting.
You share the grid, not the answer. A result is five squares and a score: no spoilers, no solution, nothing that ruins the puzzle for the next person.
That is the condition for a daily puzzle to work at all — if what gets shared gives the answer away, sharing kills the game.
Fire beats ice, ice beats water, water beats fire. When two cards of the same type meet, the higher number wins. That is the whole rule set — the difficulty is not in the rules but in both hands being face up.
That is what the daily puzzle format requires: the same board, one submission, comparable results. Each board is filtered through a solver so that a perfect sweep is impossible and exactly one ordering is best.
No. What gets shared is five squares and a score; it does not reveal which card you played when. You can share without spoiling it for anyone.
No. There are no card packs, loot boxes, second currencies or real-money prizes. The only purchasable thing is a one-time Pro unlock.
It is finished and in the pre-release stage, currently in closed testing. The App Store and Google Play links will be added to this page once it ships.
I build products from idea to store release. Reach me by e-mail.