Programming

RippleUp — One Kotlin Codebase, Shipping on Android and Windows Desktop (v5.3.3 in Production)

Rudra Sarker
AI Engineer & Full-Stack Developer | Creator of MindWell, SightlineAI & StealthHumanizer
·
2 min read
·
AI-generated

AI tooling disclosure

Generative AI materially contributed to this article.

Human review confirmed by the author.

RippleUp — One Kotlin Codebase, Shipping on Android and Windows Desktop (v5.3.3 in Production)

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.

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 Comment

No comments yet. Be the first to comment!

Rudra Sarker
Rudra Sarker

AI Engineer & Full-Stack Developer | Creator of MindWell, SightlineAI & StealthHumanizer

Hi, I'm Rudra Sarker—an AI Engineer and Full-Stack Developer passionate about building high-impact, accessible web platforms and intelligent systems. I build solutions that blend AI, accessibility, and mental health, including MindWell (accessible mental health support platform), StealthHumanizer, SightlineAI, and ScienceLab 3D. Here on ZyVOP, I write about AI engineering, web development, open-source projects, and developer productivity.

Subscribe to Rudra Sarker's Newsletter

Direct email dispatches when new stories are published. Zero algorithms.