A native Android loyalty-card wallet. Scan a card's barcode once, then pull it up on screen at the till instead of digging through a keyring of plastic. No account, no server, no network permission.
Loyalty cards are a solved problem in the worst possible way: everyone carries a stack of them, uses each one for the few seconds it takes to be scanned, and carries them the rest of the year for nothing. The apps that replace them mostly want an account, a marketing opt-in, and a network connection.
Loyca started life as Cardly, a Laravel + NativePHP for Mobile build — a PHP runtime and a WebView packaged into an Android shell. It proved the product quickly, but it shipped a whole interpreter just to render a barcode. The brief for v2 was simple: same features, same on-disk data, a fraction of the weight.
Loyca is a single-module Android app in Kotlin 2.4, built with Jetpack Compose and Material 3. Room owns the card library, DataStore holds preferences such as the light / dark / follow-system theme, and Navigation Compose ties the screens together.
The camera path is CameraX feeding ML Kit's on-device barcode scanner; the render path is ZXing drawing the code into a bitmap. Release builds are minified and resource-shrunk through R8, and the version name lives in a single Gradle property that the version code is derived from, so the two can never drift.