Start with the game, not the store.
The first reference showed a six-by-six queen board with pastel regions, a rule card and a short lesson. We treated that as the visual and interaction brief: warm cream, purple controls, generous type, and clear feedback. The original working name was Queens; the public game is now Crowns. The third game was first called Zip; its public name is now Path. Wend kept its name.
Before making screens, we wrote down each win condition. Crowns needs one queen in each row, column and color region, with no two queens touching diagonally. Wend connects orthogonally adjacent letters into its intended words, without entering blocked cells or reusing a letter in the same path. Path joins numbered checkpoints in order while visiting every square. Those are three distinct rulesets, so each deserved its own engine and tests.
A screenshot can specify layout and mood; it cannot specify edge cases. We defined invalid moves, hints, undo, reset and completion before treating the board as finished.
Build one mobile foundation.
We used Expo SDK 57, React Native, Expo Router and strict TypeScript. The home screen introduces all three playable games and a non-playable preview for a future title. Each game has Learn, a normal puzzle and Daily play. Shared components hold the game selector, buttons, logo, completion message and confetti; a theme holds colors, spacing and typography. Phone layouts prioritize the board and stack supporting information; larger screens have room for side-by-side cards.
src/app/ Expo Router screens
src/games/queens/ Crowns rules, puzzles, board
src/games/wend/ Wend rules, puzzles, board
src/games/zip/ Path rules, puzzles, board
src/components/ Shared controls and feedback
src/i18n/ English and Spanish messagesInternal route and save identifiers still use queens and zip. We changed public labels without renaming persisted keys, so existing players keep their progress. This is a migration decision, not a naming mistake in the UI.
Keep rules outside React.
Each game has pure TypeScript functions for legal moves, hints, completion and save validation. The board component renders the result; it does not decide what is legal. That lets unit tests exercise the rules without mounting a native screen.
- Crowns: define connected color regions and check the intended solution count. A distant diagonal is allowed; only touching diagonals conflict. Tap cycles an empty square through X and queen, and undo/reset have explicit histories.
- Wend: validate orthogonal letter paths, blocked cells, reuse and backtracking. Puzzle sets differ by language, and restored paths must still be valid for that set.
- Path: check ordered checkpoints, no revisits, full-board coverage and uniqueness. A dragged path is a transaction that can be undone; a saved route is validated before display.
Puzzle data lives with each engine. Daily variants reuse those tested rules instead of implementing a second game. This separation later made it possible to change the public names without changing solutions or save data.
Make fingers, scrolling and navigation cooperate.
A puzzle can be correct and still feel broken on a phone. Wend initially let the page scroll while a finger drew a word. We now lock the outer scroll only during an active board touch, restoring it on release, cancellation or leaving the board. A full-screen iOS back gesture also stole rightward Path drags. The root navigator disables swipe dismissal, leaving game changes to visible controls.
The selector became one raised target spanning icon, title and chevron, large enough to tap comfortably. Completion puts the next-puzzle action close to the board rather than below a long rules card. Wins have a short celebration; Crowns pieces turn gold, and Reduce Motion avoids unnecessary movement. Touch, success and victory sounds are bundled and optional; restoring a saved win is silent.
Save a game you can trust.
Guest progress is stored locally, including regular and daily puzzles, undo history and relevant counters. The timer pauses when the app backgrounds or the player changes route. Saves are validated against the current puzzle on load: corrupted or outdated paths cannot manufacture a solved board. Reset clears the current board and is undoable.
Optional accounts came later. Players can keep playing as guests or sign in with an email code, explicitly import guest saves, and sync progress across devices. A revision check prevents one device from silently overwriting another; the UI asks the player to choose when there is a conflict. Accounts share one Knotivo identity across its three games. Other future SKOA apps will have separate registration.
Localize the rules and the content.
The app reads the phone's preferred language, with English and Spanish support and English fallback. Buttons, hints, accessibility labels and explanations all follow that choice. Crowns and Path retain the same board across languages. Wend has separate English and Spanish word catalogs, so changing language restores the corresponding puzzle and saved path rather than applying an English answer to a Spanish board.
We kept the engines' feedback semantic and localized it at the UI boundary. That makes it possible to test game behavior once and still verify both rendered languages. The brand, icon and marketing images were applied across the app, the Knotivo landing, the games catalogue and SKOA's company site.
Add services only where they help.
Knotivo's optional account backend is a dedicated Supabase project in Ireland under SKOA, with private profiles and cloud saves. Resend sends the email codes. Account deletion removes account data and queues an independent request to erase analytics identity. A scheduled privacy worker checks that request; an accepted request is not presented as completed erasure.
Mixpanel EU receives only opted-in usage events, such as a puzzle start, completion, hint or reset. It does not receive word answers, board coordinates, email addresses or automatic session replay. Opting out stops later delivery and clears the pending queue. Backend secrets stay outside the mobile bundle; the app receives only public client configuration through the production EAS environment.
The app is free today. A possible Plus tier is a separate product decision and has no in-app purchase implementation yet. Other SKOA agents are working on finance and a business plan; this article covers how the games were built and verified.
Test where failures actually happen.
The project runs TypeScript checking, Expo lint and unit tests for observable rules and state transitions. BrowserOS neo exercises the rendered game controls on a dedicated local origin: taps, drags, undo, reset, hints, persistence, completion, responsive screens and both languages. For the Crowns/Path release, the recorded baseline was 85 unit tests and 43 browser scenarios passing.
npm ci
npm run check
npm run build:web
npm run e2e:serveThe web build and browser suite catch shared UI and logic regressions; they do not prove native gestures. We also launched a Release simulator build on iPhone and iPad, inspected screenshots, and used TestFlight for signed iOS distribution. Android JavaScript and assets export, but no Android store binary or device test has been completed. These are deliberately separate claims.
Build the app, then tell its story.
EAS built and signed the iOS app in the cloud. Version 1.0.0 (11), with the public Crowns and Path names, passed Apple binary processing and is available to the internal TestFlight group. Release simulator captures supplied the updated iPhone and iPad store images. The app listing has bilingual metadata, support and privacy pages, and describes the optional account and analytics data.
The first public App Review attempt was rejected under Guideline 2.1, Information Needed: Apple requested more developer information and a recording from a physical iPhone showing the app and account flows. The team has not completed that recording or the resubmission. TESTFLIGHT BETA · NOT PUBLICLY RELEASED
For discovery, we published three separate marketing destinations: SKOA → SKOA Games → Knotivo. The public sites introduce the mobile app; they do not ship the playable Expo web build as a desktop game.
What we would carry into the next game.
Start with explicit win conditions; put game transitions in pure functions; validate saves; test touch on a phone; and separate beta availability from public store approval. Shared navigation, branding, accounts and localization make a fourth game easier to add, while each new puzzle still needs its own rules and solution checks.
As of 30 September 2026, Knotivo's next public-release step is the physical-device recording and Apple's review response. Physical-device account and drag checks, Android distribution and a future paid offering remain separate work. Read more about the app at Knotivo ↗, or explore the broader collection at SKOA Games ↗.