Ember is a native Android fitness app built with Kotlin + Jetpack Compose + Room (MVVM, offline-first, on-device): strength training plus a Strava-style Run Mode (live GPS runs with a dark map, pace/splits, routes). This is a personal-use app.
History: v1 was a
.NET MAUI/ C# proof-of-concept. It's preserved on therelease/1.0branch and tagv1.0.0. v2 is this ground-up native Kotlin rewrite (tagv2.0.0). The full migration story, architecture, and design system live indocs/rework/.
- 5-item shell with a central Start action; fast live logging (touch numpad, REPS/KG, set types, RIR/RPE, timed sets, supersets, rest timer)
- Reusable templates; searchable/filterable exercise catalog with custom exercises and photos (your own, plus wger / free-exercise-db imagery)
- Full history with after-the-fact editing
- Progress: per-exercise e1RM/volume charts, records/PRs, and a muscle-recovery body map
- Import/export (portable JSON + CSV; Lyfta CSV importer), Health Connect sync, and scheduled automatic backup
- Minimal-dark design with an ember accent
app/— the Android appdata/— Room entities/DAO/db, repository (the only IO boundary), import/export, services (Health Connect, backup, wger sync, images)domain/— pure Kotlin (no Android imports): analytics, records, recovery, progression, estimatesui/— Compose:App.ktshell, per-area ViewModels, one-file-per-screen, reusablecomponents/
docs/rework/— architecture, data model, design system, feature roadmap, phase reportstools/— PowerShell helpers for building/installing and pulling data off a USB-connected phone
For a non-programmer on Windows, create a self-contained phone installer:
.\tools\make-phone-installer.ps1Send the resulting dist/Ember-Phone-Installer-v*.zip. The recipient extracts it, connects an
unlocked phone with USB debugging enabled, and double-clicks Install Ember.cmd. The guided
installer downloads Google's Android platform tools, installs or upgrades Ember without clearing
compatible app data, and opens it. Android requires USB debugging for computer-driven installs;
the included README.txt walks through that one-time phone setting.
Building from source requires JDK 17 and the Android SDK (platform 35, build-tools 35). The Gradle wrapper fetches Gradle.
.\tools\build-and-install.ps1 -LaunchOr with Gradle directly:
.\gradlew.bat assembleDebug
.\gradlew.bat testDebugUnitTest
.\gradlew.bat connectedDebugAndroidTest # on a connected deviceA minified, self-signed release build is available if wanted — see
docs/rework/release-signing.md — but nothing requires it.
docs/rework/README.md— the rework index (architecture, design, phases)docs/decisions.md,docs/roadmap.md— historical, describe the v1 MAUI POC
PolyForm Noncommercial 1.0.0 — free for personal and non-commercial use; selling or other commercial use requires permission.