Calisthenics Progression
PythonFlaskNext.jsExpo (React Native)PostgreSQL
A full-stack calisthenics workout tracker — built for learning purposes. Handcrafted in 2019 with inspiration from Flask Mega Tutorial, now enhanced with the assistance of AI.
Log your training sessions, define custom exercises with progression levels and workout templates, follow your progress in charts, and connect with other athletes. Originally a Flask/Jinja2 monolith, the project is now a Flask REST API + Next.js web + Expo (React Native) mobile architecture with Supabase Auth.
Features
Workout tracking
- Log workouts with multiple exercises, sets, and rep counts or duration values
- Plan workouts on a calendar, mark them done, re-plan them
- Create and use workout templates — start a workout pre-filled from a template
- Smart workout form: searchable exercise picker with category filters, progression-level chips, counting-type-aware inputs (reps vs mm:ss duration)
Exercise library
- Create and manage custom exercise definitions with ordered progression levels (e.g. Tuck Planche → Straddle Planche → Full Planche)
- Markdown descriptions with images
- Categorize exercises and filter by category
- Browse and copy exercises from other athletes
- Visibility per exercise and workout: public, followers only, or private
Statistics
- Exercise progression over time (best set or total), by week or month
- Training frequency and volume by category
Social
- Explore workouts from other athletes, follow / unfollow (with follow requests)
- View user profiles with workout history
- Private messaging between users
Safety and moderation
- Terms of use accepted at registration
- Report users, workouts, exercises and messages (reports are stored and emailed to admins; review with
flask reports list) - Block users — blocks hide both sides from each other everywhere and remove follows
- Account deletion in the app and on the web removes all of a user's data
Account
- Registration with Supabase email confirmation, password reset
- Edit profile (username, about me, profile picture)
- English and German, light and dark mode