Designing Sudoku Flick — from idea to first playable

Designing Sudoku Flick — from idea to first playable

I have made a small new year resolution: ship a thing that isn't a developer tool.

I read code for a living, and writing libraries and Neovim plugins is fun, but the population of people who care about a Neovim plugin is in the low thousands at best. I wanted to build something my mother could touch.

The thing I picked is a Sudoku app.

This post is about why it's a Sudoku app, why it has a stupid name like "Sudoku Flick", and what the first three weeks of building it looked like.

Why Sudoku, when there are a thousand of them?

There's a particular kind of mobile experience I've grown to hate.

I open a Sudoku app on the train. The first thing I see is a banner ad. I dismiss it. There's a streak counter. There's an XP bar. There's a "challenge a friend" button. The cell I want to tap is a 30×30 hit target inside a 40×40 cell with a 2px border. I tap. The keyboard at the bottom is twelve buttons in a row, and they're all 28px tall. I miss the 7 and hit the 8. I undo. I try again. By move five I've already accepted that I'm playing a game made by a marketing team.

The thing I want — the thing I think a lot of people want — is the opposite. Quiet. No streaks. No XP. No ads (or at most, the kind of ad that doesn't move). Big, comfortable touch targets. An input system that doesn't require my eyes to leave the puzzle.

So that's the brief. Quiet Sudoku, played with one thumb, optimized for the train.

The flick gesture

The naming convention "Sudoku Flick" is on the nose, but the gesture really is the idea.

A traditional Sudoku UI has a number pad — nine buttons, one through nine. You tap a cell, then tap a number. Two taps minimum. If you want notes mode, three taps. The buttons live at the bottom of the screen because your thumb is at the bottom of the screen. Your eyes have to do a lot of round trips between the grid and the pad.

The idea behind Sudoku Flick:

        2
      ╲   ╱
   1 ─ 9 ─ 3
      ╱   ╲
        ...

(Yes, 9 in the middle is deliberate — the most common "fall back to center" gesture is the easiest one to do. The mapping of digits to directions is also configurable; I have a hunch right-handers and left-handers want different layouts, and I want to leave room for that.)

The thing this buys, from playtests with myself on the train:

It's not the first time someone has tried gesture-based Sudoku input, but every time I've seen it the gesture was tacked on as a feature next to the number pad. I want to start from the gesture and design everything else around it.

What the app is built on

A boring choice: React Native + Expo.

Expo SDK 55 it is. Plus:

The big absent friend, deliberately: no game engine. The board is just SVG and React. Sudoku is not a 60fps gameplay loop; it's a puzzle. Reanimated for the few animations that do happen; React for everything else.

The aesthetic north star

I keep two references open while I work on this:

  1. Mini Metro. Transit-map minimalism. Flat shapes. Two-tone color. Confident negative space. The UI gets out of the way of the thing you're doing.
  2. A blank piece of graph paper. Sudoku is a paper puzzle. The screen should feel like the paper, not like a casino.

That gives me a set of constraints I write down on day one and refuse to break:

Constraints are easier than freedom for a one-person project. "Can I add a drop shadow?" is a question I do not have to answer because the answer is always no.

What I built in three weeks

A lot of the first three weeks was infrastructure that has nothing to do with the game itself.

The flick implementation deserves a separate post. The short version: I tried three different angle-thresholding schemes before landing on a polar-coordinate hit test with a deadzone radius. The first two felt like fighting the gesture system. The third one felt like the gesture was reading my mind.

I'll cover that in detail next month.

What's left

For "first playable", I need:

I'm aiming for first playable by end of February. Not "App Store ready" — just "I can hand it to a friend and they can solve a puzzle".

The thing I keep reminding myself: this is a puzzle app. Not a platform. Not a SaaS. Not a side hustle. If I never make a cent on it, I will still have used it on the train every day, and that is good enough.

More soon.

References

Jeffrey Cheung

Backend Software Engineer at Stransa. Obsessed to learn and build things. Occasionally, I write blogs about neovim related stuffs and articles I read lately.