Back to projects
Kotlin Jetpack Compose Material 3 OpenStreetMap

Piste

A native Android ski companion app built with Kotlin and Jetpack Compose. Record ski runs with automatic lift detection, explore 5 map styles, track statistics with activity rings, and manage waypoints — all with privacy-first local storage.

View on GitHub
91 Commits
5 Map styles
98.5% Kotlin
12 Waypoint icons

Five map styles, one seamless experience

5 Map Styles

Switch between OpenStreetMap, OpenTopo, satellite imagery, CyclOSM cycling maps, and a dedicated ski-piste overlay.

Offline Caching

Automatic tile caching keeps maps available in areas with poor cellular coverage on the mountain.

Real-Time Compass

Live compass overlay with heading indicator for orientation in whiteout conditions or unfamiliar terrain.

Marker Clustering

Intelligent clustering prevents map clutter when viewing dense waypoint areas at lower zoom levels.

Resort Auto-Detection

Automatically identifies nearby ski resorts based on GPS location for quick map centering.

Dark Mode Maps

Full dark mode support including map tile rendering for comfortable use in low-light conditions.

Automatic run detection and tracking

Background Service

Persistent foreground service continues recording when the screen is off or other apps are in use.

Auto-Run Detection

Automatically detects when you start a ski run versus riding a lift based on speed and elevation patterns.

Lift Auto-Pause

Pauses run statistics while on chairlifts to keep your descent data clean and accurate.

Elevation Profiling

Real-time elevation gain and loss tracking with altitude graph visualization for each run.

Speed Heatmaps

Color-coded track overlays showing speed variations across your recorded runs on the map.

Session Recovery

Automatic session persistence recovers your active recording if the app is killed or the device restarts.

Visualize your progress

Activity Rings

Apple-inspired activity rings tracking daily vertical meters, distance, and run count against personal goals.

GitHub-Style Heatmap

Year-at-a-glance contribution-style heatmap showing skiing frequency and intensity over time.

Personal Bests & Streaks

Automatic tracking of fastest speeds, longest runs, biggest vertical days, and consecutive skiing streaks.

Built with modern Android

Stack

Kotlin Jetpack Compose Material 3 osmdroid Coil Coroutines

APIs & Services

OpenStreetMap Google Play Location Open-Meteo GPX Strava

Architecture

  • MVVM with repository pattern
  • SharedPreferences + Gson storage
  • Foreground service for GPS recording
  • Privacy-first — no cloud sync
  • MIT licensed, fully open-source

Safety Features

  • Daylight tracking with sunset warnings
  • Avalanche risk awareness alerts
  • Session crash recovery
  • GPX import/export for data portability
  • Full backup and restore

See the full source

Piste is open-source and available on GitHub.