Cityscape — City Puzzles
A photo-based puzzle game on both stores from a single Kotlin Multiplatform codebase.
- Period
- 2026 — now
- Platforms
- AndroidiOS
- Stack
- Kotlin MultiplatformComposeFirebaseRevenueCat
- Links
- Google Play ↗
One codebase owning the game engine, puzzle state machine, persistence and purchases — with genuinely native UI on each platform.
The problem
Contract clients rarely ask whether you can write Kotlin. They ask whether you can take something from nothing to live on both stores, and then keep it there. Cityscape exists to answer that in public.
Constraints
One developer, two platforms, two store billing systems. Shared logic could not come at the cost of UI that feels borrowed from the other platform — a cross-platform game that looks cross-platform undermines the argument it is meant to make.
What we built
A single Kotlin Multiplatform codebase owns the game engine, the puzzle state machine, persistence and an in-app-purchase abstraction. The UI layer is deliberately not shared: Compose Multiplatform on Android, SwiftUI on iOS, each free to follow its own platform conventions.
RevenueCat sits over both billing systems so entitlements are one concept rather than two, and Firebase covers the backend so there is no server to babysit. Puzzle content is data, not code, so new cities ship without a release.
What shipped
Live on the App Store and Google Play under Light Scout Ltd, with the game, the subscription flow, the store listings and the release pipeline all built and run in house.