ClientOne TypeScript codebase, tuned for phones
Built on React Native, with graphics drawn on the GPU and animation running off the main thread, so a busy garden stays smooth on older iPhones.
TypeScriptReact NativeExpoReanimatedSkia
Game engineA pure, testable rules engine
Every rule lives in one engine that works out the game state from timestamps. Offline time, notifications and saves always agree, because they all ask the same function.
Pure functionsZustandZod
SavesOffline-first, nothing lost
The save lives on the device, with an append-only ledger for every coin and item that moves, and rolling backups that keep a last good copy.
SQLiteLedgerRolling backups
BackendServerless at the edge
Remote config, purchase webhooks and nightly housekeeping run at the edge. Over-the-air updates come from a self-hosted, signed update server rather than a paid service.
Cloudflare WorkersD1R2Cron
MonetisationPurchases, a subscription and a season pass
In-app purchases through StoreKit, with no analytics, no tracking and no tracking prompt.
StoreKitRevenueCat
ShippingA release pipeline that runs itself
Builds, submissions, prices and store listings in 50 locales are scripted, and the App Store screenshots are captured from scripted simulator runs.
fastlaneApp Store Connect APIGitHub ActionsMaestro