Inspiration

I wanted a daily puzzle that rewards reasoning instead of reflexes — something you can finish in two minutes and still feel clever about. The idea came from watching a painting take shape: whole rows and columns laid down one stroke at a time, each one hiding part of what came before. If you can paint it forward, you should be able to rewind it.

What it does

AnchorMind Rewind shows you a finished grid of colored tiles, built one row or column at a time and asks for the exact order it was painted. The key insight is that the last line placed is the only one still showing a single solid color — remove it, and the next one appears. Every board is generated with a peel-solver that proves the puzzle has exactly one solution before a player ever sees it. Available in English, Simplified Chinese and Traditional Chinese.

Daily — one free board a day, identical for everyone, resetting at midnight. The week has a personality: Monochrome Monday hides the colors so you read symbols only, Foggy Friday hides part of the grid, and the Sunday Challenge is the hardest board of the week. Holidays get their own palettes and themed strokes: Ghost Day, Valentine's, New Year, St. Patrick's, Earth Day and Lunar New Year.

Endless — unlimited puzzles at your own pace on a ladder that grows from 4x4 to 7x7 with more strokes, colors and fog. Par is the fewest strokes possible; match it for three stars and climb the global stars leaderboard.

Gauntlet — a weekly survival run. Clear a rung under Par with no mistakes to win a shield; a wrong move spends one, and when the shields are gone the run ends. Out of shields, an optional rewarded ad buys one more, and buyers start every run with a free shield.

The whole game runs locally: no account, no internet needed, resume mid-puzzle any time, and scores sync to the leaderboard when you reconnect. Every solve produces a shareable score card.

How I built it

The game is plain HTML, CSS and JavaScript — no framework — so the logic is testable in Node and the whole thing loads instantly. js/rewind.js holds the paint model, the peel-solver and the unique-puzzle generator; the generator brute-forces each candidate board and rejects anything with more than one valid paint order. It ships as an Expo + react-native-webview app built with EAS cloud builds, so no Mac was needed. Leaderboards run on Supabase, analytics on PostHog behind feature flags, ads through Google AdMob, and purchases through RevenueCat (react-native-purchases), where the Remove Ads entitlement gates the ad path.

Dailies are deterministic from the date, so there is no puzzle bank to run dry — every future date already has its board. To prove that holds, I ran a forward sweep over 100 years of daily puzzles, 2026 through 2125: roughly 36,500 boards, every one brute-force verified as having exactly one valid paint order, fogged and unfogged, at full difficulty, with zero fallbacks. A second sweep proves every Gauntlet rung is unique and solvable.

Challenges I ran into

Proving uniqueness at scale was the hard part: a generator that makes a pretty board is easy, one that guarantees a single answer is not. Fog made it harder — hiding cells can quietly create a second valid order, so fog is only applied where the solver still proves uniqueness, and it is capped so it stays a garnish rather than a wall.

I also built the board as real brush strokes and threw it away: readability depends on crisp tile edges, and paint texture fought it. And the interstitial ads never served at first, which turned out to be a rollout flag and a placement problem rather than the SDK.

Accomplishments I'm proud of

A puzzle whose every daily board is provably unique for the next hundred years. A daily rhythm with a personality for each day of the week, in three languages. And a monetization model I'm comfortable with: the daily puzzle is free and ad-free forever.

What's next

More games in the AnchorMind family — Cascade and Flux — plus more holiday boards for the markets the game already speaks to, and paywall tests at the moment a Gauntlet run runs out of shields.

Built With

Share this project:

Updates

Submission history