title: "RippleUp \u2014 One Kotlin Codebase, Shipping on Android and Windows Desktop (v5.3.3 in Production)" published: true description: "A Compose Multiplatform social-good app with a Supabase backend, QR verification with location proof, and a native Windows desktop port \u2014 from one shared UI." tags: kotlin, android, showdev, opensource
The premise
Most "cross-platform" stories stop at the pitch. RippleUp is a shipping product: v5.3.3 in production, distributed as an Android APK and a self-contained Windows desktop app, built with Kotlin, Jetpack Compose, and Compose Multiplatform 1.6.11.
What the app does
RippleUp is a social-engagement platform: users self-report activities (with a 5-minute camera verification window), scan partner QR codes (live CameraX + MLKit barcode scanning), earn points and badges, and join events. Anti-abuse is built in — per-action cooldowns (45/30/90/120 min), 12 actions/day, 300 points/day.
The production backend
The cloud layer is a full Supabase setup: user accounts, sync, QR verification with location proof (who + where + map), admin review, badges, notifications, and event registration. The schema ships as SQL in the repo (schema.sql + security migration) with RLS and the approve/reject/badge pipelines as database logic — clone it, run two SQL files, connect, and you have the whole backend.
The desktop port is a genuinely native build
desktop/ is a Compose Multiplatform port with identical screens, verify flow, badges and sheets. The platform swaps are the interesting part:
- Persistence: Room → atomic JSON store at
~/.rippleup/state.json(same schema, same HMAC tags) - Photo capture: camera intent → Swing
JFileChooser - QR scan: live CameraX+MLKit → the same viewfinder; a click simulates scanning a partner QR
- Auth storage: SharedPreferences →
java.util.prefs
gradlew createDistributable produces a self-contained app with a bundled runtime — RippleUpDesktop.exe runs with no Java installed.
CI
GitHub Actions builds debug + signed release APKs on every push to main (keystore injected via secrets) and the desktop zip on every push touching desktop/ — releases are reproducible from the repo, not from someone's laptop.
Links
- Source: github.com/rudra496/RippleUpApp
If you're fighting Compose Multiplatform's rough edges on desktop (persistence swaps, camera intents, packaging), the repo is a working reference — ask me anything in the issues.

Comments(0)
Join the discussion securely with your ZyVOP account.
Continue on ZyVOP to CommentNo comments yet. Be the first to comment!