Skip to content

Take control of your fitness with STRIVE – the modern training app that helps you reach your goals, step by step. Explore hundreds of exercises, create custom workouts, and run them with smart timers and guides. Track your runs with real-time GPS and follow your progress through clear charts and statistics.

License

Notifications You must be signed in to change notification settings

Carlsmeister/mobile-exercise-app-kotlin-strive

Repository files navigation

πŸ’ͺ Strive

Your Personal Fitness Companion

Take control of your fitness journey with Strive – a modern Android application that helps you reach your goals, step by step.

Platform Language Compose Min SDK License

Features β€’ Screenshots β€’ Tech Stack β€’ Getting Started β€’ Architecture β€’ License


πŸ“– About

Strive is a comprehensive fitness tracking application built with modern Android development practices. Whether you're hitting the gym or going for a run, Strive helps you plan, track, and analyze your workouts with an intuitive interface and powerful features.

Built entirely with Kotlin and Jetpack Compose, Strive demonstrates clean architecture, modern UI design, and seamless integration with Google services.


✨ Features

πŸ‹οΈβ€β™€οΈ Exercise Library

  • πŸ“š Browse 200+ exercises with instructions
  • πŸ” Smart search by name or body part
  • πŸ–ΌοΈ Visual demonstrations
  • πŸ“΄ Works 100% offline

πŸ’ͺ Workout Planning

  • πŸ“ Create custom workout templates
  • βš™οΈ Configure sets, reps, and rest times
  • 🎯 Quick workout mode
  • πŸ”„ Drag-and-drop exercise reordering

⏱️ Live Tracking

  • ⏰ Smart countdown timers
  • πŸ“Š Real-time progress tracking
  • πŸ‹οΈ Weight progression memory
  • πŸ”₯ Automatic calorie estimation

πŸƒ GPS Run Tracking

  • πŸ—ΊοΈ Live map with Google Maps
  • πŸ“ Real-time GPS tracking
  • πŸ“ˆ Distance, pace, and time
  • πŸ›£οΈ Route visualization

πŸ“Š History & Stats

  • πŸ“… Complete workout history
  • πŸ“ˆ Progress charts
  • πŸ” Filter by activity type
  • πŸ’Ύ Export capabilities

🎨 Modern UI/UX

  • πŸŒ™ Material 3 Design
  • πŸ“± Responsive layouts
  • πŸ”„ Portrait & landscape support
  • ⚑ Smooth animations

πŸ“Έ Screenshots

Explore Screen

Exercise Library
Browse & search exercises

Workout Screen

Workout Templates
Create custom workouts

Run Screen

GPS Tracking
Live map & stats

History Screen

Activity History
Track your progress


πŸ› οΈ Tech Stack

Core Technologies

Kotlin Compose Material3

Architecture & Patterns

  • πŸ—οΈ Clean Architecture - Separation of concerns across layers
  • 🎯 MVVM Pattern - Reactive UI with ViewModel and StateFlow
  • πŸ’‰ Dependency Injection - Dagger Hilt for modular dependencies
  • πŸ”„ Reactive Programming - Kotlin Flow for reactive data streams

Libraries & Frameworks

Category Technology
🎨 UI Jetpack Compose, Material 3, Coil (image loading)
πŸ’Ύ Database Room (SQLite ORM with Flow support)
🌐 Network Retrofit, OkHttp, Kotlinx Serialization
πŸ—ΊοΈ Maps Google Maps SDK, Location Services
πŸ’‰ DI Dagger Hilt
πŸ’Ώ Preferences DataStore
πŸ”’ Security R8 Code Shrinking & Obfuscation

Architecture Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   UI Layer                          β”‚
β”‚          Jetpack Compose + ViewModels               β”‚
β”‚              (Screens, Components)                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚ StateFlow/Events
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Domain Layer                         β”‚
β”‚         Use Cases + Repository Interfaces           β”‚
β”‚              (Business Logic)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                    β”‚ Models
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 Data Layer                          β”‚
β”‚      Room Database + Retrofit API + Mappers         β”‚
β”‚         (Local & Remote Data Sources)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • βœ… Android Studio Hedgehog (2023.1.1) or later
  • βœ… JDK 11 or higher
  • βœ… Android SDK 28+ (Android 9.0 Pie)
  • βœ… Google Play Services (for Maps & Location)

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/strive.git
    cd strive
  2. Open in Android Studio

    • Launch Android Studio
    • Select "Open an Existing Project"
    • Navigate to the cloned directory
  3. Configure API Keys

    Create a local.properties file in the project root (if it doesn't exist) and add:

    # Google Maps API Key (Required for Run screen)
    MAPS_API_KEY=your_google_maps_api_key_here
    
    # ExerciseDB API Key (Optional - app works offline without it)
    RAPIDAPI_KEY=your_rapidapi_key_here

    πŸ’‘ Getting API Keys:

    • Google Maps: Get API Key - Enable "Maps SDK for Android"
    • ExerciseDB: RapidAPI - Free tier available
  4. Sync & Build

    File β†’ Sync Project with Gradle Files
    
  5. Run the app πŸš€

    • Connect an Android device or start an emulator
    • Click the "Run" button or press Shift + F10

πŸ“± Usage

First Launch

  • The app will automatically seed the exercise database on first launch
  • No account or login required
  • All data is stored locally on your device

Creating a Workout

  1. Navigate to Workout tab
  2. Tap "Create Template"
  3. Add exercises from the library
  4. Configure sets, reps, and rest times
  5. Save and start your workout!

Tracking a Run

  1. Navigate to Run tab
  2. Select activity type (Running, Cycling, Walking)
  3. Grant location permissions when prompted
  4. Tap "Start" and begin your activity
  5. View real-time stats and route on the map

πŸ—οΈ Architecture

Strive follows Clean Architecture principles with clear separation between layers:

Modules

πŸ“¦ app
 ┣ πŸ“‚ core              β†’ Cross-cutting concerns (DI, Utils, Location)
 ┣ πŸ“‚ data              β†’ Data sources (Room, Retrofit, Repositories)
 ┣ πŸ“‚ domain            β†’ Business logic (Models, Use Cases)
 β”— πŸ“‚ ui                β†’ Presentation (Compose Screens, ViewModels)

Key Principles

  • βœ… Single Responsibility - Each class has one job
  • βœ… Dependency Inversion - Depend on abstractions, not concretions
  • βœ… Separation of Concerns - UI, Business Logic, and Data are independent
  • βœ… Testability - All components are easily testable

πŸ”’ Security & Privacy

  • πŸ” No User Accounts - All data stored locally
  • 🚫 No Data Collection - Your fitness data stays on your device
  • πŸ”‘ API Key Protection - Keys stored securely in build configuration
  • πŸ›‘οΈ R8 Obfuscation - Code protected against reverse engineering
  • πŸ”’ HTTPS Only - All network communication is encrypted

🀝 Contributing

This project was created as an academic assignment. While it's not actively seeking contributions, feel free to:

  • πŸ› Report bugs by opening an issue
  • πŸ’‘ Suggest features or improvements
  • 🍴 Fork the project for your own experiments

It's still under development and may evolve over time.

Development Setup

If you want to contribute or experiment:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

What this means:

  • βœ… Commercial use - You can use this code in commercial projects
  • βœ… Modification - You can modify the code
  • βœ… Distribution - You can distribute the code
  • βœ… Private use - You can use the code privately
  • ⚠️ Liability - The software is provided "as is"
  • ⚠️ Warranty - No warranty is provided

Attribution

If you use this project, attribution is appreciated but not required:

Strive - Fitness Tracking App
Original Author: Carl Lundholm
GitHub: https://github.com/Carlsmeister/strive

πŸ‘¨β€πŸ’» Author

Carl Lundholm

GitHub LinkedIn Email

πŸŽ“ UmeΓ₯ University | 5DV209 - Mobile Application Development
πŸ“… Academic Year Summer 2025


πŸ™ Acknowledgments

Special thanks to:


πŸ“ž Support

If you encounter any issues or have questions:

  1. πŸ› Search existing issues
  2. πŸ’¬ Open a new issue

πŸ—ΊοΈ Roadmap

Future improvements planned:

  • β˜€οΈ Light theme support
  • πŸ“Š Advanced statistics and charts
  • πŸ† Achievement system
  • πŸ“€ Workout sharing with friends
  • ⌚ Android Wear integration
  • πŸ“± Widget support
  • 🌐 Multi-language support
  • ☁️ Optional cloud backup

⭐ Show Your Support

If you found this project helpful or interesting, please consider:

  • ⭐ Starring the repository
  • 🍴 Forking for your own experiments
  • πŸ“’ Sharing with others

Built with ❀️ using Jetpack Compose

⬆ Back to Top


Β© 2025 Carl Lundholm. All rights reserved.

About

Take control of your fitness with STRIVE – the modern training app that helps you reach your goals, step by step. Explore hundreds of exercises, create custom workouts, and run them with smart timers and guides. Track your runs with real-time GPS and follow your progress through clear charts and statistics.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages