Inspiration

The four color theorem has a great backstory. In 1852 a law student was coloring a map of the English counties and noticed he never needed more than four colors to keep neighbors apart. Proving it took 124 years and, in the end, a computer.

I kept thinking there was a game in there. The rule fits in one sentence, and every map still feels different. So I built the version I wanted to play with my morning coffee: one small board a day, the same for everyone, that you solve by thinking instead of guessing.

What it does

You get a map drawn as dots and lines. Dots joined by a line are neighbors, and neighbors can't share a color. Four colors, and that's the whole rule.

The part I care about most is that every board has exactly one solution. A few dots come already colored, and before a board goes live a solver checks that everything else can be worked out step by step. So if you're stuck, there's always a dot you can prove. You just haven't found it yet.

What's in the app today:

  • The daily board: a new one at midnight UTC, the same for every player in the world.
  • Leaderboards, global and friends, for both the Standard and the Hard board. Your time goes up the moment you finish.
  • Practice: as many boards as you want in four sizes, from Seed (8 shapes) to Axiom (16), with a personal best for each.
  • Progress: streaks, freezes you earn to cover a missed day, and an archive of every past board.
  • Achievements: 40 of them in 14 ladders, from Bronze to Legend, for daily boards, streaks, flawless solves, speed and duels.
  • Friends and duels. You add someone with a six-letter code. In a duel you both play the same board once, and neither of you sees the other's time until you've both finished.
  • Your look: themes, symbol sets and wallpapers, and an avatar made from whatever you own.

Who it's for

Anyone with a daily puzzle habit who wants something that isn't about words. There's no text on the board, so it works in any language. Every color also has a symbol inside, so color-blind players get exactly the same game.

How I built it

By day I'm a test automation engineer, so I built Cantle the way I would want to test it: every build runs the full unit suite and static checks, and fails if any label stops fitting a small phone.

Cantle has its own board generator, built from scratch rather than on a puzzle library. It places a small planar graph, pushes the dots apart until no lines cross, picks which dots to give away, and runs a solver to make sure there's only one answer. A board gets harder when the chain of reasoning gets longer, and the board itself doesn't have to grow.

Each day's board comes from the date plus a secret salt on the server. Every phone gets the same board, and nobody can work out tomorrow's in advance.

The app is React Native with Expo and TypeScript. The server is Node with SQLite. RevenueCat is what let me ship paid features alone in a month: I never wrote receipt validation or subscription state myself. Purchases go through RevenueCat on top of StoreKit 2, and the server listens to RevenueCat webhooks as well, so the phone and the server always agree on who has Pro.

How it makes money

The daily board is free and will stay free. No ads, no tracking, no account to create.

Cantle Pro costs $2.99 a month or $19.99 a year and gives you more of the game: Hard Mode (a tougher second board every day with its own streak and leaderboard), the full archive, replaying a day you missed, and the two biggest practice sizes. There are also fourteen cosmetics you buy once, and you can try each one on a real board before paying.

Challenges I ran into

One answer, every time. The whole game depends on each board having exactly one solution, and that turned out to be the hardest part to build. The generator has to lay out a graph with no crossing lines, choose the given dots, and then prove with a solver that nothing else works, fast enough to run for every day and every difficulty. On top of that, the server and every phone have to build the identical board from the same date. For a while my local server produced different boards from production, until I tracked it down to a per-database salt.

Small screens, eight languages. I wanted the game to fit an iPhone SE at large text size, in German and Ukrainian, where words run much longer than in English. Checking that by eye stopped working after the first few screens, so I wrote tests that fail the build when any label stops fitting at 320 dp. The paywall alone went through several redesigns before it fit an iPhone 15 without scrolling.

Getting into the stores. The App Store asked for a screen recording and detailed answers on my first submission as a new developer, and the EU trader rules meant translating a lease agreement into English and certifying it myself. Google Play was harder: a closed test with at least 12 testers for 14 days, and then an address check that rejected the document I had. That is why Cantle is on iOS first. Android has since passed Google Play's closed test and is waiting for Google's production review.

Launch day. The day after release I pushed a server change to tighten up the leaderboard, and it broke every copy of the app already on people's phones: their solves showed as "not accepted". I had a fix out the next day. Since then, every server change is tested against the app version people actually have installed before it goes out.

Being seen. My first daily videos got a few dozen views, and on Reels, TikTok and Shorts the captions covered exactly the part that matters, the color tray and the final time. After trying several ways of editing around it, I changed the game instead: the development build now has a recording mode that keeps the board and the result above each network's captions, so the video can be posted exactly as recorded.

Accomplishments that I'm proud of

Cantle is the first app I've ever released, and honestly I'm proud it's out there at all. It took 33 working days from the first commit to the App Store, and people now play the same board every morning.

Before launch I gave it to colleagues and friends and watched them play. A lot of what's in the app came out of those sessions, and their feedback left me with a clear list of what to build next.

I also teach computer science at a school, alongside my day job in test automation, and showing my students a real game on the App Store that their teacher made has been one of the best parts of all this. They play it, cheer it on and give me feedback, and they ask how the boards are made and how an app gets into the store.

Some technical things I'm happy with:

  • A solver checks every board for a single solution before it ships, and a determinism test makes sure the server and every phone build the identical board from the same date.
  • Cheating is hard. Solve times are checked on the server, there's a minimum time per move, and a per-device anchor stops people from submitting the same board again from a fresh account.
  • It works offline. A solve made without a connection waits in a queue and is sent later, and a duel result doesn't get lost on a bad network.
  • Accessibility was there from the start: Dynamic Type up to 1.3x, Reduce Motion everywhere, errors read out by VoiceOver, a symbol in every color.
  • More than 70,000 automated checks on every build, including checks that fail the build if a label stops fitting on a 320 dp screen in German or Ukrainian.
  • The server has a watchdog, backups that survive a deploy, and a load test that plays through whole days of traffic.
  • An admin console I use every day. I can find any player and their history, handle name reports and flagged scores, ban or restore, delete an account on request, give someone Pro or a cosmetic through RevenueCat, keep an eye on crashes and server health, and force an update when an old build has to go.
  • A website at cantle.app, in English and Ukrainian, with a practice page, a guide to hard boards, support, and account deletion that works without the app.

Before release I also ran several full audits of the app and the server and worked through what they found, from leaderboard ties and time-zone edge cases to notifications that opened the wrong screen. No app ships without bugs, so the goal was simpler: fix the ones players would hit first and write the rest down with a plan.

Since launch I've posted a video of yesterday's board every day on X, Instagram, Facebook, Threads, YouTube, TikTok and LinkedIn.

What I learned

Shipping is a skill of its own. Store listings in eight languages, privacy labels, age ratings, offer codes, review notes, webhooks and address checks took about as long as the game did. I now know the whole road from an idea to a live app.

I learned to work with feedback. Colleagues, friends and my students all told me something different, and not every idea fit the game. I learned to sort it: what to fix right away, what to build later, and what to leave out. Fixing the first group quickly mattered, because people kept testing once they saw their feedback in the next build.

The launch-day bug taught me that the app on people's phones is a promise. The server can't change what it sends without checking the version they have installed.

Unit tests caught logic bugs, but the bugs that hurt were visual: a German label cut off, a board hidden under a panel on a small phone. Writing tests for layout changed how I build screens.

I also learned that building the game is only half the job. People have to find it. Making those daily videos, I'm still learning what works: which first seconds make people stay, and which part of the screen each network hides under its own buttons.

What's next for Cantle

My main rule from here: stable releases on a steady rhythm, and finding and fixing bugs before anything else.

  • Android. Cantle has passed Google Play's closed testing and is waiting for Google's production review; the public release follows as soon as Google approves it. Both stores will share the same daily board and leaderboard.
  • Regular updates. In every update I fix bugs first, and I write what changed so players can see it.
  • Better daily videos and more of them: strategy breakdowns and the math behind the game.
  • Working with streamers and creators. One idea I'd like to try is "chat vs streamer": viewers race the streamer on the same board, and anyone who beats the streamer's time wins a month of Pro. I want events like this to bring new players in and grow a community around the daily board.
  • Groups: private leaderboards for a class, an office or a Discord server. My students will be the first one.
  • More accessibility, with the goal of a board you can play fully with VoiceOver, moving from a dot to its neighbors and hearing their colors.
  • A home screen widget that shows whether today's board is still waiting and how your streak looks.
  • Tablet layouts for iPad and Android tablets, so the board can use the bigger screen.
  • A shareable result card and a link that opens the same board for a friend, so a duel can start from any chat.
  • Stats that show how you improve: average time per week, fastest solves, and your best days.
  • A monthly recap card: boards solved, best time, longest streak and the medals you earned that month, ready to keep or share.
  • More languages, starting with the ones players ask for most.
  • Moving the server off a single machine and caching the daily leaderboard, so a day with 100,000 players runs as smoothly as a quiet one.
  • Weekend themed boards, a harder weekly challenge, and new achievement ladders.

Built With

Share this project:

Updates

posted an update —

Cantle 1.0.8 is out on Google Play.

17 new medals, 57 in all, from Bronze to Legend, for streaks, speed, flawless solves, the Hard board, duels and friends. Duel invites and results now arrive straight away, the Hard board no longer serves boards that are too easy, and screenshots are no longer blocked on the daily board.

The iPhone version is waiting for Apple review and will be out soon too. For iPhone players it's the biggest update so far, since all the medals arrive at once.

Android: https://play.google.com/store/apps/details?id=app.cantle iPhone and Android: https://cantle.app/get

Log in or sign up for Devpost to join the conversation.

posted an update —

Cantle is now on Google Play

Version 1.0.7 went live on Google Play this week, so the game is on both stores:

It is the same daily board on both: one board a day, the same for everyone, with the leaderboard, friends and duels shared across platforms. The Android build already includes the 40 achievements shown in the video.

The same 1.0.7 for iOS currently waiting for an apple review and will be shipped soon

Log in or sign up for Devpost to join the conversation.

Submission history