No description
- Python 43.4%
- JavaScript 27.1%
- HTML 25.7%
- CSS 3.8%
| .github | ||
| static | ||
| templates | ||
| .env.example | ||
| .gitignore | ||
| app.py | ||
| forms.py | ||
| gunicorn.conf.py | ||
| helpers.py | ||
| models.py | ||
| project-plan.md | ||
| README.md | ||
| requirements.txt | ||
| routes.py | ||
Workout Tracker – Family Edition
A tiny, self-hosted web app for our family of 3 to log workouts, track progress, and gently roast each other with leaderboards.
Built mostly while listening to lo-fi beats, drinking too much coffee, and letting AI agents do the heavy lifting.
(Yes, this is basically vibe-coding™ with generous help from Grok and its speedy little brother. No shame in my game.)
What It Does
- Log simple workouts: walking/running, kettlebell swings, bodyweight circuits, etc.
- Auto-calculates a "workout impact" score using estimated calories burned (primary leaderboard) + MET-minutes (secondary fairness view)
- Personal dashboard + shared comparison page with basic charts
- PWA support (installable on Android phones)
- Optional push notifications when someone else logs a workout (self-hosted, no Firebase)
- Super lightweight: Flask + SQLite + bare-metal Linux homelab deployment
Perfect for small groups who want friendly competition without Strava-level complexity or privacy concerns.
Tech Stack
- Backend: Python 3 / Flask
- Database: SQLite (single file, zero config)
- Frontend: Jinja2 + Bootstrap 5 + Vanilla JS + Chart.js
- Auth: Flask-Login
- PWA & Push: Service Worker + Web Push API (pywebpush + VAPID)
- Deployment: Gunicorn + nginx reverse proxy (no Docker)
- AI Assistance Level: 85% vibes, 15% actual typing (thanks Grok!)
Features Roadmap (as of now)
- User login & workout logging
- Calorie/MET estimation with activity dropdown
- Responsive design & basic PWA shell
- Profile (edit weight)
- Leaderboard & charts
- Push notifications for "someone just logged – your move"
- Optional stretch: category trophies ("Kettlebell Queen", "Walk Master")
Why This Exists
Because:
- I can't run right now (foot says no) but can do some old-styled Russian kettlebell swings.
- My daughter won't be caught dead doing my "old man walks" and is running circles around me (sometimes literally)
- We still want to compete / encourage / poke fun
- Self-hosted > cloud subscription + privacy
Setup (for future-me or anyone cloning this)
- Clone repo
python -m venv venv && source venv/bin/activatepip install -r requirements.txt- Copy
.env.exampleto.envand fill secrets flask run(dev) or set up gunicorn + systemd + nginx (prod)- Point a subdomain at it, get Let's Encrypt, done.
(Full deployment notes in project-plan.md)
License
MIT – do whatever.
If you fork it and make it actually pretty, send screenshots so I can feel inadequate.
Made with ☕, lo-fi, and a lot of "@workspace please fix this" prompts.
— Horo the Wise, 2026