- plugins/withReleaseSigning.js — Expo config plugin that injects a release
signingConfig into android/app/build.gradle at prebuild, reading credentials
from credentials/keystore.properties (gitignored). Survives CNG regeneration.
- scripts/build-release-apk.sh — generate keystore (once) → prebuild → build →
install → emit a shareable cardclaws-demo.apk
- .gitignore: exclude /credentials, *.keystore, *.apk (no secrets/binaries)
Produces a standalone APK with the JS bundle embedded — runs with no Metro, no
laptop, no Wi-Fi. Built, signed, installed, and verified running on a physical
device with Metro stopped + the USB route removed.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
- New /demo flow (no login/backend): take/pick a photo → card front;
swipe → back reveals QR + name/title. Built in-memory on device.
- CardFace renders image backgrounds (local URI or asset key) + borderRadius prop
- CardViewer `fullScreen` mode fills the device window (useWindowDimensions),
radius 0, status bar hidden; applied to the demo and the real card viewer
- Landing screen offers the demo without signing in
- Added expo-image-picker (camera/photo perms); pinned expo-constants/expo-linking
to SDK 51 (npm had resolved newer-SDK majors that broke the Gradle build)
- Native android/ is gitignored (regenerated by `expo prebuild`)
Built and deployed to a physical Android device (BUILD SUCCESSFUL).
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>