Welcome
Overview
Full stack fitness tracking application using TinyDB, SQLite, FastAPI, Svelte
and Docker. Imported weight-training records live in year-based
<YEAR>_workouts.yml files, each containing a TinyDB weight_training_log
table. FastAPI reads those archives without changing them. Optional frontend
workout entry and edits use transactional SQLite state, separate from YAML.
The browser opens the latest available year and supports date ordering, pagination, and exercise-set details. Workouts have permanent UUIDs, so multiple sessions on the same day remain distinct. Imports validate calendar dates and record structure before writing; malformed legacy records are logged and omitted from API results.
The API caches parsed records and indexes workout IDs. File identity, size, and
modification/change timestamps invalidate changed data without a server restart.
API reads do not modify the workout files. Anonymous responses use the private,
60-second cache policy; session-protected data uses no-store.
Track and log workouts
- Archive: browse workouts by year, inspect sets, and edit or import records when authenticated writes are enabled.
- Progress: review full-range volume, activity, exercise history, personal records, and program phases; drill down to source workouts or export CSV.
- Programs: review dated programs and structured targets, with opt-in target editing.
- Body Metrics: view historical measurements, with opt-in manual entry and CSV import.
The header's Log workout action is available from every view. Enable writes, provision an athlete password, and sign in before using it. Enter multiple exercises and sets, plus optional times, gym, program, bodyweight, effort, and notes. Successful saves open the new workout in Archive and preserve its link after reload. See the frontend guide for setup, validation rules, retry behavior, and storage details.
The Oxygen CLI provides validated imports, headless
figure generation, and optional image opening on Windows, Linux, and macOS.
The legacy bin/fitcli.sh workflow remains available for Linux and macOS.
Getting Started
Follow the examples to install dependencies, import logs, and run the application. For an existing data directory, follow the workout ID migration guide before editing or renumbering legacy records.
See the browser workflow checks for desktop and mobile testing, the architecture for the browser, archive, and writable-state boundaries, the OpenAPI reference for the API contract, and the changelog for recent changes and verification status.
References
The development and concepts behind this fitness tracker are influenced by the following references:
Book
The book "Exercise Physiology: Nutrition, Energy, and Human Performance" provides detailed information on exercise physiology, nutrition, energy, and human performance, which, together with other textbooks and articles, form the foundation of the algorithms and recommendations used in this application.
Education
My formal education as both a fitness instructor at the "At Work" school as well as a Running Coach at the "DGI" school has provided me with the theoretical and practical knowledge necessary to design effective fitness programs and tracking systems. In addition, I hold the instructor certificate in Leung Ting Wing Tsun from "Wing Tsun Instructor Academy" which besides main focus on this discipline, incorporated elements of strength and cardio training, nutrition, yoga and more.
Professional Experience
My hands-on experience working as a fitness instructor at SATS for two years has given me valuable insights into the practical aspects of fitness training and client management. This experience has been instrumental in shaping the user experience and functionality of this application. I furthermore had the priveledge to teach classes at various martial arts gyms across different styles, across greater Copenhagen for a number of years.
Similar projects
If you liked this fitness tracker then you might also be interested in
the workout-generator Django project,
the nutrition-planner Streamlit project, with associated development guide:
medium,
the athlete project,
or the Dojo martial arts project
which can be found on GitLab and is a Rust & TypeScript based general purpose martial arts desktop application