Feature request: Add GPS activity tracking
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
- Domain
- backend-api-design, data, mobile
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
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:
-
Rendering engine: MapLibre (open source, no API key, no Play Services) or
flutter_mapwith vector tile support. MapLibre is what Vela, Organic Maps-adjacent projects and many fitness apps use. -
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.
-
Vector tiles, offline: users import a region as
.pmtilesor.mbtilesvia 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. -
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
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from InlitX/GymMane
-
enhancement long term
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
InlitX/GymMane#311 · 1 comment · 2 reactions ·
Maintainers usually reply within 4 days
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Maintainers usually reply within 4 days
-
Sets per weekOpen
Difficulty 5/5 Over a week Newbie friendliness 36/100
Maintainers usually reply within 4 days
-
Difficulty 3/5 1-2 days Newbie friendliness 58/100
Maintainers usually reply within 4 days
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 38/100
InlitX/GymMane#329 · 2 comments ·
Maintainers usually reply within 4 days
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
fable-compiler/Fable#5280 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
immich-app/immich#33043 ·
Maintainers usually reply within 1 day
-
[unified_analytics] Add fallbackRootTool to getEnvironment()Possibly taken @NemesisDevX claimed this today. Openpackage:unified_analytics
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Notalib/flutter_readium#312 ·
Maintainers usually reply within 2 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
finamp-app/finamp#1860 ·
Maintainers usually reply within 1 day