2,121
stars
+3
536
forks
30
watchers
19
prs
16
issues
0
releases
0
discussions
README
Free Exercise DB 💪
Open Public Domain Exercise Dataset in JSON format, 800+ exercises with a browsable public searchable frontend
Why?
I started building another fitness related app and was looking for free/open source exercise lists and imagery I stumbled upon
exercises.json which was amazing though the data wasn't structured the way I wanted it and I also wanted a browsable/searchable frontend to the data inspired by this issue so I restructured the data and built a simple frontend to it :)
What do they look like?
All exercises are stored as seperate JSON documents and conform to the following JSON Schema eg.
json
{
"id": "Alternate_Incline_Dumbbell_Curl",
"name": "Alternate Incline Dumbbell Curl",
"force": "pull",
"level": "beginner",
"mechanic": "isolation",
"equipment": "dumbbell",
"primaryMuscles": [
"biceps"
],
"secondaryMuscles": [
"forearms"
],
"instructions": [
"Sit down on an incline bench with a dumbbell in each hand being held at arms length. Tip: Keep the elbows close to the torso.This will be your starting position.",
],
"category": "strength",
"images": [
"Alternate_Incline_Dumbbell_Curl/0.jpg",
"Alternate_Incline_Dumbbell_Curl/1.jpg"
]
}
See Alternate_Incline_Dumbbell_Curl.json
To further explore the data, you can use lite.datasette.io
How do I use them?
You can check the repo out and use the JSON files and images locally
Alternatively
You can leverage github's hosting and access the single or combined exercises.json and prefix any of image path's contained in the JSON with https://raw.githubusercontent.com/yuhonas/free-exercise-db/main/exercises/ to get a hosted version of the image eg. Air_Bike/0.jpg or leverage something like imagekit.io for dynamic image resizing which is utlized on the frontend example site
Build tasks
There are a number of helpful Makefile tasks that you can utilize
Linting
To lint all the JSON files against the schema.json use
make lint
Combining into a single JSON file
If you make changes to any of the exercises or add new ones, to recombine all single JSON files into a single JSON containing an array of objects using the following make task
sh
make dist/exercises.json
_Note: requires jq_
Importing into PostgreSQL
To combine all JSON files into Newline Delimeted JSON suitable for import into PostgreSQL use the following make task
sh
make dist/exercises.nd.json
_Note: requires jq_
See also Importing JSON into PostgreSQL using COPY
Browsable frontend
There is a simple searchable/browsable frontend to the data written in Vue.js available at yuhonas.github.io/free-exercise-db all related code is in the site directory
Setup
sh
npm install
Compile and Hot-Reload for Development
sh
npm run dev
Compile and Minify for Production
sh
npm run build
Run Unit Tests with Vitest
sh
npm run test:unit
Run End-to-End Tests with Cypress
sh
npm run test:e2e:dev
This runs the end-to-end tests against the V