Resonance Mobile

- Year
- 2026
- Role
- Solo developer
- Status
- In progress
- Stack
- React Native · Expo · Kotlin · SQLite · Supabase
Resonance on Android — the same database, the same recommender, the same cloud sync — with lock-screen playback and a native Kotlin module that finds the audio itself. The one I use every day.
Shared, not rewritten
The recommender and the sync engine are the desktop files, copied byte for byte by a script. Where desktop code calls into Rust through Tauri, a small shim answers the same commands on the phone — so a fix on one side is a fix on both. The SQLite schema is generated from the desktop migrations, and both sync through the same Supabase project with row-level security.
Finding the audio on the phone
There is no yt-dlp on Android, so a native Kotlin module built on NewPipeExtractor resolves streams, searches and builds radios on the device. ExoPlayer plays them in the background and on the lock screen, where voting on a track is one tap — karma is the whole point, so it has to be reachable without opening the app.
Under the hood
- 01React Native and Expo with a dev client, NativeWind for styling
- 02Sync guards: a membership whose track never reached the cloud gets a placeholder instead of being dropped silently
- 03Stream quality that respects mobile data, and downloads for offline listening
- 04English and Turkish throughout








