Runique is a multi-module, offline-first running tracker app that monitors your health, tracks your runs with real-time location, and supports both Android mobile and Wear OS platforms.
|
|
RuniqueDemo.mp4
- 🔁 Real-time Run Tracking: Track your runs using Google Maps and draw running paths using google map drawlines.
- 📊 Health Metrics: View data such as Distance, Heart Rate, Pace, Speed, Elevation, and more.
- 📷 Map Snapshots: Capture and display run paths with data on the overview screen.
- 📶 Offline-First: All data is stored locally using Room DB and syncs with the server when online.
- ⌚ Wear OS Support: Real-time tracking and display optimized for Wear OS smartwatches.
- Multi-module, clean MVI architecture
- OAuth authentication with token refresh
- Offline-first with Room Database
- Dynamic Feature Modules for modular builds
- Remote APIs, local databases & caching strategies
- Health & Fitness tracking using Google Health SDK
- Location tracking with the Google Maps SDK
- Full support for Wear OS devices
- Gradle Version Catalogs & Convention Plugins
- Implement watch to phone communication and what it takes to correctly sync exercise data
- Kotlin
- Kotlin Coroutines + Flow
- Jetpack Compose (UI)
- Material3 Design System
- ViewModel
- Room Database
- Navigation (with Hilt support)
- Lifecycle-aware components
- DataStore (preferences)
- SplashScreen API
- Hilt
- Koin (selective modules)
- Ktor
- Kotlinx Serialization
- Room
- MongoDB (NoSQL)
- Coil
- Timber
Runique follows MVI (Model-View-Intent) with a Repository Pattern, and aligns with Google's recommended app architecture.
- Compose UI
- ViewModels for state & event management
- Observes state via Kotlin Flows
- Repositories manage local/remote data sources
- Room DB & Network API abstraction
- Offline-first strategy
- 🔁 Reusability: Share logic across features
- 🏗 Parallel Builds: Improve build times
- 🚧 Isolation: Reduce tight coupling between modules
- 👥 Team Focus: Developers can work independently on dedicated modules
👉 Learn more: Android App Modularization Guide
- Kotlinx Serialization
- KSP (Kotlin Symbol Processing)
- Compose Compiler Plugin
- Google Health Services
- Google Maps SDK
- Dynamic Feature Delivery
In order to run the project on your phone, you'll need to first clone it and then add two API keys for:
- ... the Runique API (access granted after course purchase)
- ... Google Maps (needs to be got from Google Cloud Console - instructions in the course)
Then simply include them in local.properties
:
API_KEY=<RUNIQUE_API_KEY>
MAPS_API_KEY=<GOOGLE_MAPS_API_KEY>
Afterwards, build the project and you're ready to use it.
If you like this project, please consider ⭐ starring the repo and following me for more cool Android projects!
☕ You can also support my work by buying me a coffee:
Designed and developed by Shubhanshu Singh (2025)
Licensed under the Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0