Open Public Domain Exercise Dataset in JSON
format, 800+ exercises with a browsable public searchable frontend
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 :)
All exercises are stored as seperate JSON
documents and conform to the following JSON Schema eg.
{
"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
You can check the repo out and use the JSON
files and images locally
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/dist/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
There are a number of helpful Makefile tasks that you can utilize
To lint all the JSON
files against the schema.json use
make lint
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
make dist/exercises.json
Note: requires jq
To combine all JSON
files into Newline Delimeted JSON suitable for import into PostgreSQL use the following make task
make dist/exercises.nd.json
Note: requires jq
See also Importing JSON into PostgreSQL using COPY
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
npm install
npm run dev
npm run build
Run Unit Tests with Vitest
npm run test:unit
Run End-to-End Tests with Cypress
npm run test:e2e:dev
This runs the end-to-end tests against the Vite development server. It is much faster than the production build.
But it's still recommended to test the production build with test:e2e
before deploying (e.g. in CI environments):
npm run build
npm run test:e2e
Lint with ESLint
npm run lint
The following fields are incomplete in some JSON
files and in such have had to allow null
in schema.json
- force
- mechanic
- equipment
There are also a small number of duplicate images eg.
jdupes --summarize --recurse .
Scanning: 2620 files, 874 items (in 1 specified)
25 duplicate files (in 22 sets), occupying 809 KB
Made with contrib.rocks.
Contributions are always welcome! Please read the contribution guidelines first.
- Ollie Jennings for the original dataset at exercises.json
- flaticon for the favicon see Sports-and-competition icons created by Dragon Icons - Flaticon