Skip to content

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.

Notifications You must be signed in to change notification settings

shubhanshu24510/Runique

Repository files navigation

🏃‍♂️ Runique - Running Tracker App

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.

Run Feature

Auth Feature Phone Watch Mockup

🔍 Preview

RuniqueDemo.mp4

✨ Features

  • 🔁 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.

🧩 Key Highlights

  • 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

🛠️ Tech Stack

Language & Concurrency

  • Kotlin
  • Kotlin Coroutines + Flow

Jetpack Libraries

  • Jetpack Compose (UI)
  • Material3 Design System
  • ViewModel
  • Room Database
  • Navigation (with Hilt support)
  • Lifecycle-aware components
  • DataStore (preferences)
  • SplashScreen API

Dependency Injection

  • Hilt
  • Koin (selective modules)

Networking

  • Ktor
  • Kotlinx Serialization

Database

  • Room
  • MongoDB (NoSQL)

Image Loading & Logging

  • Coil
  • Timber

🧱 Architecture

Runique follows MVI (Model-View-Intent) with a Repository Pattern, and aligns with Google's recommended app architecture.

Layers:

UI Layer

  • Compose UI
  • ViewModels for state & event management
  • Observes state via Kotlin Flows

Data Layer

  • Repositories manage local/remote data sources
  • Room DB & Network API abstraction
  • Offline-first strategy

📐 Architecture Diagram
architecture

📦 Modular Diagram
modular architecture

📲 UI Layer
ui layer

📡 Data Layer
data layer


🧱 Modularization 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


🧰 Additional Tools & Libraries



How do you run the project?

In order to run the project on your phone, you'll need to first clone it and then add two API keys for:

  1. ... the Runique API (access granted after course purchase)
  2. ... 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.


🤝 Support

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:

Buy Me A Coffee


📄 License

Designed and developed by Shubhanshu Singh (2025)

Licensed under the Apache License, Version 2.0

http://www.apache.org/licenses/LICENSE-2.0

About

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.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Languages