Skip to content

LahsineYounes/RunTrailApp

Repository files navigation

🏃 RunTrail

The application prioritizes signal integrity, uninterrupted tracking, and minimal UI noise. Complex telemetry is reduced into a clean, high-contrast interface designed for outdoor visibility and immediate readability.

Platform Language UI Architecture License

  • RunTrail is a precision-focused GPS running tracker engineered for reliability under real-world constraints.
  • It records routes, pace, distance, and elevation while maintaining consistent background execution even under aggressive system limitations.

Features

1. Tracking

  • Continuous GPS route recording with live polyline rendering
  • Real-time pace, distance, and elapsed time calculation
  • Elevation-aware tracking (device dependent)

2. Reliability

  • Foreground service resistant to background termination
  • Mid-run persistence to prevent data loss on crashes
  • GPS signal filtering to reduce drift and spikes

3. History & Insights

  • Persistent run history with detailed summaries
  • Aggregated metrics across sessions
  • Map-based replay of recorded routes

4. UI/UX

  • Minimalist, distraction-free interface
  • High-contrast design optimized for outdoor usage
  • Large typography for real-time metrics

5. Advanced

  • Location smoothing via filtering logic
  • Audio coaching via Text-to-Speech (distance milestones)
  • Custom Canvas charts for weekly distance visualization

Tech Stack

Core

  • Language: Kotlin
  • UI: Jetpack Compose
  • Architecture: Clean Architecture + MVVM

Data & State

  • Local Storage: Room Database
  • Async: Coroutines + Flow
  • State Management: StateFlow

System & Services

  • Location: FusedLocationProviderClient
  • Maps: Google Maps SDK
  • Background Execution: Foreground Service + NotificationManager

Dependency Injection

  • Hilt

Screenshots

Home History StartRun
Home history startRun

Architecture & Logic Overview

runTrail Arch Logic

RunTrail follows strict separation of concerns using Clean Architecture mapped to MVVM.

FusedLocationProviderClient
        ↓
Repository (Flow)
        ↓
UseCases (Domain Layer)
        ↓
ViewModel (StateFlow)
        ↓
Jetpack Compose UI

Layers

Presentation

  • Compose UI
  • ViewModels
  • Reactive state via StateFlow

Domain

  • Business logic (UseCases)
  • Pure Kotlin, no framework dependencies

Data

  • Repository implementations
  • Room database
  • Location data sources

Performance Considerations

  • Batched database inserts during active tracking
  • Controlled recomposition in Compose
  • Efficient polyline rendering for large datasets

Security & Privacy

  • Fully offline architecture
  • No external APIs or data transmission
  • Location permissions handled with explicit user consent

About

A GPS run tracker that records routes, pace, and elevation with post-run summaries.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages