eyespie

Eyespie

Eyespie is an offline-first travel spy game built with Kotlin Multiplatform and on-device computer vision.

Backendless core

Core gameplay requires no hosted backend and no hosted account. Game authority, clues, embeddings, matching, and progress are local to the device. Cloud and peer networking are optional future adapters for capabilities that actually need them.

The former Supabase-based application remains recoverable from:

The reboot and closed-alpha release are tracked by issues #156 and #90. The backendless/local-authoritative epoch is called Wayfinder.

Closed-alpha implementation status

The Wayfinder closed-alpha implementation is integrated on main:

Operational diagnostics are deliberately separate from product analytics: the current diagnostic path is bounded, local/process-lifetime, explicit-export only, and has no remote collector or gameplay authority.

Release readiness

Implementation and simulator/CI qualification are not the same as physical release proof. The current release path is qualification of one exact post-Wayfinder/post-telemetry candidate, not feature expansion.

The latest exact-head protected Android publish=false candidate build has successfully validated the requested source SHA, staged and verified the pinned runtime model, produced signed APK/AAB artifacts, and validated the signed Android artifact. That does not establish iOS signed-distribution or physical-device acceptance by itself; #90 remains the canonical candidate/evidence tracker.

Closed-alpha readiness still requires the evidence owned by:

Do not describe these physical/release gates as complete until their evidence is recorded against the exact accepted candidate. Candidate-changing source changes must re-bind affected evidence rather than carrying it forward implicitly.

Build and verification

The canonical local/CI Android gate is:

mise run ci

That verifies release-candidate identity, Python evidence tooling, Android unit tests, the debug application, and the instrumentation-test APK.

Ordinary build/CI paths intentionally remain network-independent and do not provision the external image-embedding model. To provision the pinned model, verify it, and install a runnable Android debug application on a connected device/emulator, use:

mise run android-runtime

To verify an already-staged Android runtime model without network access or repair, use:

mise run android-runtime-verify

The Gradle application project is named :app even though its source directory is eyespie/. The direct operations are therefore:

./gradlew :app:stageAndroidImageEmbedderModel
./gradlew :app:verifyAndroidRuntime
./gradlew :app:installDebug

See docs/development/android-runtime.md for the stage → verify → install contract, failure diagnosis, and shared-automation boundary.

The iOS integration workflow additionally resolves the project-specific MediaPipe CocoaPods graph, compiles the Kotlin/Native simulator target, and builds the real unsigned Xcode simulator application.

Physical/release runbooks live under docs/release/, including candidate identity, Android/iOS embedding calibration, network observation, cross-device smoke testing, and protected internal distribution.

Wayfinder presentation contracts and review evidence live under docs/design/.

See ARCHITECTURE.md for the current architecture and trust boundaries.