Back to our work

About this project

Kitdoku

Just. Sudoku.

A sudoku app for iPhone and iPad with no ads, no pop-ups, and no timers. A new puzzle every day, 1,500 more in the campaign, big readable numbers, and hints that explain themselves. Pay once, play offline forever.

Download on the App Store

iPhone and iPad · iOS 15 or later · $0.99, no in-app purchases

Kitdoku main menu on an iPhone
bundled puzzles
1,500
difficulty tiers
4
named solving techniques
7
ads, trackers, or network calls
0

Screenshots

What it looks like.

The board fills the screen and the numbers stay large, even with tired eyes. Everything below is captured straight from the app.

Kitdoku main menu showing the daily puzzle card, quick play difficulties, and campaign progress
A new puzzle every day
Kitdoku board with large digits, highlighted row and column, and the number pad
Big, clear numbers
Kitdoku hint banner naming the technique and explaining which cell it applies to
Hints that teach
Kitdoku board in dark mode
Easy on the eyes at night
Kitdoku calendar showing solved and started daily puzzles
Keep your streak going
Kitdoku settings with individual toggles for every assist, sound, haptics, and theme
Every helper has a switch
Kitdoku on an iPad in landscape, board on the left and controls on the right, with a hint banner explaining a naked single
On iPad the same layout moves the board beside the controls. No separate tablet build.

Why it exists

Built for one tired player.

Kitdoku started as a gift. One person in our life wanted a sudoku app they could open at the end of a long day without a fight. Every app they tried had ads between puzzles, pop-ups asking for money, and a timer ticking in the corner. They just wanted to play.

So we built one with the opposite priorities: a single one-time price, no account, no tracking, and no internet needed. Every helper is optional and has its own switch, so the app can be as gentle or as strict as the player likes. It shipped to the App Store in September 2026.

How it was built

A web stack, shipped native.

Kitdoku is the same approach we use for client apps: a fast, lightweight web codebase that runs inside a native shell, with the logic kept separate from the interface so it can be tested hard and reused on other platforms later.

Svelte 5 TypeScript Vite Capacitor Web Audio API CSS Grid Vitest Playwright Xcode iCloud Key-Value Store

01

One codebase, native shell

The app is a Svelte 5 and TypeScript web app bundled by Vite, wrapped in a native iOS shell by Capacitor. Only three Capacitor plugins are used: Preferences for storage, Haptics, and Status Bar. Everything else is plain browser APIs. No React, no UI kit, no web fonts, so the whole app stays under 50 MB with all 1,500 puzzles inside.

02

A pure core under a reactive shell

The solver, puzzle generator, technique library, and game controller are framework-free TypeScript with no Svelte imports. That keeps them trivially unit-testable. A single Svelte 5 runes module wraps the controller, persists state on every change, and exposes actions to the components. Components never touch game logic directly.

03

Hints that name the technique

A technique-aware solver walks the board the way a person would: naked and hidden singles, locked candidates, naked and hidden pairs, and X-Wing. When a player taps Hint, the app finds the next logical step, names it, and explains in plain words why the digit goes there. The same trace grades every puzzle, so "Hard" means it actually needs harder techniques.

04

Puzzles generated, then proven unique

The generator builds a complete board with randomised backtracking, then digs holes while checking that exactly one solution remains and that the puzzle lands in the target difficulty tier. A script produced the 1,500 campaign puzzles ahead of time. The daily puzzle is seeded from the date and generated on the device, so every player gets the same puzzle without the app ever contacting a server.

05

Offline first, with iCloud as a safety net

There are no runtime network calls at all. Progress lives in versioned storage keys so a schema change can migrate one bucket without touching the others. On iOS every write is also mirrored to the iCloud key-value store through a small custom native plugin, so a player who deletes and reinstalls the app, or gets a new phone, keeps their streak.

06

Sound and haptics with no audio files

Every sound is synthesised at runtime with the Web Audio API. Each digit plays its own note along a pentatonic scale, a wrong placement thuds, and solving a puzzle plays a short arpeggio. The sound design is expressed as data, so it is unit-tested like everything else. Haptics follow the same event plan.

07

One layout for phone and iPad

The whole screen is a single CSS Grid with named areas. Portrait stacks header, board, toolbar, and number pad; landscape on iPad puts the board on the left and the controls on the right. The switch is one media query on aspect ratio, with no JavaScript branching and no separate tablet layout to keep in sync.

08

Tested at every layer, including the store

Vitest covers the core engine. Playwright drives the UI in WebKit at phone and tablet sizes to mirror the iOS web view, including adversarial input and corrupted-storage cases. A store-readiness suite enforces 44pt touch targets, accessible names, a clean console, and zero external requests. A smoke script builds, installs, and screenshots the app on the iOS simulator, and the App Store screenshots themselves are generated by Playwright from seeded game state.

Try Kitdoku

Available now for iPhone and iPad. One purchase, no subscriptions, and nothing to sign up for.

Need an app like this?

We build iOS and Android apps for businesses, and as a white-label partner for agencies. Same care, same testing, your brand on the front.

Start a conversation