No description
  • Python 43.4%
  • JavaScript 27.1%
  • HTML 25.7%
  • CSS 3.8%
Find a file
2026-03-18 18:42:06 +13:00
.github Enhance dashboard with kcal trends chart, add workout date/time logging, display MET-minutes and time since last workout, add collapsible notes in history table, and modularize JavaScript into separate files. 2026-03-15 21:47:30 +13:00
static Add compare page with leaderboard, summary table, and weekly kcal bar chart 2026-03-17 21:34:23 +13:00
templates Add compare page with leaderboard, summary table, and weekly kcal bar chart 2026-03-17 21:34:23 +13:00
.env.example Implement basic Workout Tracker app with user auth, workout logging, MET calculations, and history view 2026-03-09 22:16:06 +13:00
.gitignore Implement basic Workout Tracker app with user auth, workout logging, MET calculations, and history view 2026-03-09 22:16:06 +13:00
app.py Add compare page with leaderboard, summary table, and weekly kcal bar chart 2026-03-17 21:34:23 +13:00
forms.py Enhance dashboard with kcal trends chart, add workout date/time logging, display MET-minutes and time since last workout, add collapsible notes in history table, and modularize JavaScript into separate files. 2026-03-15 21:47:30 +13:00
gunicorn.conf.py add gunicorn conf 2026-03-15 21:54:58 +13:00
helpers.py Implement basic Workout Tracker app with user auth, workout logging, MET calculations, and history view 2026-03-09 22:16:06 +13:00
models.py Add user profile editing and weekly kcal tracking; add modern styling and light/dark theme changer 2026-03-10 22:05:13 +13:00
project-plan.md Add compare page with leaderboard, summary table, and weekly kcal bar chart 2026-03-17 21:34:23 +13:00
README.md Add compare page with leaderboard, summary table, and weekly kcal bar chart 2026-03-17 21:34:23 +13:00
requirements.txt Add user profile editing and weekly kcal tracking; add modern styling and light/dark theme changer 2026-03-10 22:05:13 +13:00
routes.py Sorting order fix for summary table 2026-03-18 18:42:06 +13:00

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)

  1. Clone repo
  2. python -m venv venv && source venv/bin/activate
  3. pip install -r requirements.txt
  4. Copy .env.example to .env and fill secrets
  5. flask run (dev) or set up gunicorn + systemd + nginx (prod)
  6. 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