Automatic gym visit tracker for Android. Set your gym's location once — Gymprint uses geofencing to detect when you visit and logs it automatically. No manual check-ins.
Grab the latest APK from the Releases page. No API key included — uses manual coordinate entry by default.
- Automatic tracking — geofence-based detection, no manual logging needed
- Contribution graph — GitHub-style heatmap of your gym visits over the past year
- Streak counter — tracks your current consecutive-day streak
- Home screen widgets — small (2x2) streak widget and medium (4x2) streak + graph widget
- Configurable detection — adjust geofence radius and minimum visit duration
- Material You — dynamic colors on Android 12+, clean Material 3 design
You don't need an API key to use Gymprint. During onboarding, you'll enter your gym's coordinates manually:
- Open Google Maps and find your gym
- Long-press on the gym's location to get coordinates
- Enter the latitude and longitude in the app
If you want the search-based gym picker:
- Go to Google Cloud Console
- Enable the Places API (New)
- Create an API key
- Add it to
local.properties:MAPS_API_KEY=your_key_here
The search UI will automatically be available when the key is present at build time.
git clone https://github.com/theminimaldev/gymprint.git
cd gymprint
./gradlew assembleDebugRequires Android 8.0+ (API 26). No root or special setup needed.
The APK will be at app/build/outputs/apk/debug/app-debug.apk.
Releases are built automatically on GitHub Actions when a tag is pushed:
git tag v1.0.0
git push origin v1.0.0The workflow signs the APK using secrets stored in the repository (SIGNING_KEY, KEY_STORE_PASSWORD, KEY_ALIAS, KEY_PASSWORD) and publishes it to GitHub Releases.
- Kotlin + Jetpack Compose (Material 3)
- Hilt for dependency injection
- Room for local database
- DataStore for preferences
- GeofencingClient for visit detection
- Jetpack Glance for home screen widgets
- WorkManager for periodic widget refresh
- Google Places SDK (optional, for gym search)
- Location (fine + background) — required for geofence detection
- Internet — only used if Places API key is configured
- Boot completed — re-registers geofence after device restart
- You set your gym's location (coordinates or search)
- Gymprint registers a geofence around that location
- When you enter the geofence, it records the timestamp
- When you leave, if the visit exceeded the minimum duration, it logs the visit
- Widgets and the contribution graph update automatically
MIT



