Feature request: Add GPS activity tracking

Open
#326 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 4 days

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
android, dart, flutter

Research direction

Start by reading the app’s existing workout tracking and Strava export code to understand how activities are stored and shown in Progress; the issue does not name specific files or tests. The requested scope spans GPS recording, maps, route import and export, personal comparisons, and training logs. Done would mean delivering these features while keeping activity data and map use offline.

Written by the indexing model from the issue text.

Description

enhancement

Idea

GymMane covers the gym perfectly, but on days someone runs, hikes or cycles he'd have to open a second app (f. e. Strava) whose whole business model is location data and a subscription.

Since GymMane already refuses the INTERNET permission, I'd love it to become the only fitness app by adding an offline version of Strava's core activity tracking.

Key point: GPS reception does not require the internet satellites are free. Every feature below therefore works with no account, no server, and no network.

What would also be nice is to just download offline maps.

Features

  • Record: sport picker (run, walk, ride, hike); live distance, duration, pace/speed, route traced as it's recorded.
  • Activity view: route drawing, distance, moving time, avg/max speed, elevation gain, km/mile splits.
  • Matched activities: automatically benchmark each new activity against past recordings of the same route (Strava's "matched activities", purely local).
  • Personal segments: mark a stretch of route; GymMane keeps a leaderboard of my own times and flags personal bests.
  • Personal heatmap: all GPS points ever recorded on one map view.
  • Routes: import .gpx files to follow; export activities as .gpx/.fit (extending the existing Strava export).
  • Unified training log: outdoor activities join Progress — weekly distance per sport, one combined calendar with gym sessions.

Out of scope (need servers): feed, kudos, clubs, challenges with others, Beacon, online route search. (not necessary anyway)

How offline maps can work

OpenStreetMap data is excellent, it's OSM's default style that looks dated. Take a look at Vela Maps: an open-source, de-Googled Android map that renders OSM vector tiles with MapLibre and a custom style so polished people mistake it for Google Maps. Same recipe for GymMane:

  1. Rendering engine: MapLibre (open source, no API key, no Play Services) or flutter_map with vector tile support. MapLibre is what Vela, Organic Maps-adjacent projects and many fitness apps use.

  2. A custom style JSON bundled with the app: a MapLibre style is just a small JSON file defining colors and layers — it ships inside the APK. GymMane could ship a dark theme matching the app's look (plus a light one), so the map feels native. Good starting points to fork: Protomaps basemap themes, CARTO's Positron/Dark Matter etc.

  3. Vector tiles, offline: users import a region as .pmtiles or .mbtiles via the file picker (a local file import needs no INTERNET permission). Sources: OpenAndroMaps, Protomaps builds, or planet extracts. A country at street detail is ~0.5–2 GB as vector tiles; a metro area, tens of MB.

  4. Ship a small world overview: bundle low-zoom (z0–z6) vector tiles (~20–30 MB) so any track always shows country-level context out of the box; detail comes from the imported region.

Why GymMane

No serious tracker is offline-first anymore. Adding lifts + miles with maps that never leave the phone would make GymMane unique: the private, no-account alternative to Strava.

Dominant language
Dart
Stars
844
Forks
98
Avg merge
1d 21h
Merged PRs (30d)
4

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from InlitX/GymMane

All issues in InlitX/GymMane

Similar issues

More Dart issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.