A mobile-first Progressive Web App (PWA) for tracking gym workouts in real time — built as a companion app for SparkyFitness.
Requires a running SparkyFitness instance. You need the server URL and an API key to log in.
- Daily plan view — shows today's exercises from your active SparkyFitness workout plan
- Two tracking modes — tap
+ Repper rep (Counter), or just watch a running timer and enter reps when done (Timer Only — great for both-hands exercises like resistance bands) - Automatic rest timer — counts down between sets based on planned rest time
- Auto-calculated stats —
duration_minutesandcalories_burnedwritten back to the API after every set - Tracking mode memory — per-exercise preference saved locally
- Installable PWA — add to iOS/Android home screen, works offline
Dashboard |
Exercise selected |
Counter mode |
Rest timer |
Ready for next set |
Finish confirmation |
Timer Only mode |
Rep input (Timer Only) |
- Go to Stacks → Add stack
- Paste the following compose and click Deploy the stack:
services:
sparky-workout-tracker:
image: ghcr.io/sebmuc99/sparky-workout-tracker:latest
container_name: sparky-workout-tracker
restart: unless-stopped
ports:
- "3010:80"- Open
http://your-server-ip:3010
curl -O https://raw.githubusercontent.com/sebmuc99/Sparky-Workout-Tracker/main/docker-compose.yml
docker compose up -dIf you want the SparkyFitness server URL pre-filled on the login screen, add VITE_SPARKY_URL to your stack:
services:
sparky-workout-tracker:
image: ghcr.io/sebmuc99/sparky-workout-tracker:latest
container_name: sparky-workout-tracker
restart: unless-stopped
ports:
- "3010:80"
environment:
- VITE_SPARKY_URL=https://your-sparky-instance.example.comThe container entrypoint injects this value at startup, so it works with the pre-built image — no custom build required. Without it, users simply type the URL in the login form and it's remembered in the browser.
- Log in — enter your SparkyFitness server URL and API key
- Pick an exercise from today's plan
- Start a set — choose your tracking mode:
- 🔢 Counter mode — tap
+ Repfor each rep as you do them - ⏱️ Timer Only mode — the timer runs; enter your reps when the set is done (toggle the button during the set)
- 🔢 Counter mode — tap
- End Set — the rest timer starts automatically
- Repeat for all sets, then tap Finish Workout
Your tracking mode preference is remembered per exercise.