diff --git a/.github/.gitkeep b/.github/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/.github/ISSUE_TEMPLATE/.gitkeep b/.github/ISSUE_TEMPLATE/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..4d32935
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,46 @@
+name: Bug report
+description: Report a reproducible IronLog problem
+title: "[Bug]: "
+labels: [bug]
+body:
+ - type: markdown
+ attributes:
+ value: Please remove personal fitness data, photos, API keys, and signing information from every attachment.
+ - type: input
+ id: build
+ attributes:
+ label: Build or commit
+ placeholder: Version name, commit SHA, or build date
+ validations:
+ required: true
+ - type: input
+ id: device
+ attributes:
+ label: Device and Android version
+ placeholder: Pixel 7, Android 16
+ validations:
+ required: true
+ - type: textarea
+ id: steps
+ attributes:
+ label: Reproduction steps
+ placeholder: Tell us exactly what you did and what happened.
+ validations:
+ required: true
+ - type: textarea
+ id: expected
+ attributes:
+ label: Expected behavior
+ validations:
+ required: true
+ - type: textarea
+ id: evidence
+ attributes:
+ label: Screenshots or sanitized logs
+ - type: checkboxes
+ id: privacy
+ attributes:
+ label: Privacy check
+ options:
+ - label: I removed personal data, API keys, and signing information.
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000..98499d1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,42 @@
+name: Feature request
+description: Propose a focused improvement to IronLog
+title: "[Feature]: "
+labels: [enhancement]
+body:
+ - type: textarea
+ id: problem
+ attributes:
+ label: Training problem
+ description: What becomes difficult during or around a real workout?
+ validations:
+ required: true
+ - type: textarea
+ id: outcome
+ attributes:
+ label: Desired outcome
+ description: Describe the result, not only a UI control.
+ validations:
+ required: true
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: Alternatives considered
+ - type: dropdown
+ id: area
+ attributes:
+ label: Area
+ options:
+ [
+ Workout logging,
+ Plans,
+ Recovery,
+ Progress and stats,
+ Iron Ledger,
+ Widgets,
+ Data portability,
+ Health Connect,
+ Intelligence,
+ Other,
+ ]
+ validations:
+ required: true
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..b663c1f
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,20 @@
+## Outcome
+
+What user-visible problem does this change solve?
+
+## Changes
+
+- Describe the most important implementation change.
+
+## Verification
+
+- [ ] Focused tests pass
+- [ ] `testDebugUnitTest` passes
+- [ ] `lintDebug` passes
+- [ ] `assembleDebug` passes
+- [ ] Visual or device checks are attached when relevant
+- [ ] No keys, keystores, personal data, databases, photos, or build outputs are included
+
+## Risk
+
+Call out persistence, migration, lifecycle, notification, camera, Health Connect, import/export, widget, and signing implications.
diff --git a/.github/assets/ironlog-hero.svg b/.github/assets/ironlog-hero.svg
new file mode 100644
index 0000000..c88881d
--- /dev/null
+++ b/.github/assets/ironlog-hero.svg
@@ -0,0 +1,52 @@
+
+ IronLog — Train. Recover. Prove it.
+ An animated training instrument moves a forge-orange signal through a barbell, recovery ring, and completed ledger mark.
+
+
+
+
+ LOCAL-FIRST ANDROID TRAINING
+ IRONLOG
+ Train. Recover. Prove it.
+ Fast logging, honest recovery, durable records.
+
+ LOG
+
+ RECOVER
+
+ PROGRESS
+
+
+
+
+
+
+
+
+
+
+
+
+ SESSION
+ READY
+
+
+ THE WORK IS THE RECORD
+
+
diff --git a/.github/assets/screens/home.png b/.github/assets/screens/home.png
new file mode 100644
index 0000000..b6cf102
Binary files /dev/null and b/.github/assets/screens/home.png differ
diff --git a/.github/assets/screens/recovery.png b/.github/assets/screens/recovery.png
new file mode 100644
index 0000000..c7c9e7c
Binary files /dev/null and b/.github/assets/screens/recovery.png differ
diff --git a/.github/assets/training-loop.svg b/.github/assets/training-loop.svg
new file mode 100644
index 0000000..1306c9c
--- /dev/null
+++ b/.github/assets/training-loop.svg
@@ -0,0 +1,26 @@
+
+ The IronLog training loop
+ A signal moves from workout logging to recovery, the Iron Ledger, and the next session.
+
+
+ One continuous training record
+ The next decision is informed by the work already done.
+
+
+
+ LOG THE SET load · reps · effort
+ READ RECOVERY muscles · sleep · readiness
+ EARN THE LEDGER streaks · PRs · milestones
+ GO AGAIN plan · adjust · progress
+
+
diff --git a/.github/workflows/.gitkeep b/.github/workflows/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
new file mode 100644
index 0000000..16e0514
--- /dev/null
+++ b/.github/workflows/android.yml
@@ -0,0 +1,37 @@
+name: Android CI
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+
+permissions:
+ contents: read
+
+concurrency:
+ group: android-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ verify:
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ steps:
+ - name: Check out source
+ uses: actions/checkout@v7
+
+ - name: Set up Java 17
+ uses: actions/setup-java@v5
+ with:
+ distribution: temurin
+ java-version: "17"
+
+ - name: Set up Gradle
+ uses: gradle/actions/setup-gradle@v6
+
+ - name: Verify wrapper permissions
+ run: chmod +x gradlew
+
+ - name: Test, lint, and assemble debug
+ run: ./gradlew testDebugUnitTest lintDebug assembleDebug --no-daemon
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8b2af1f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,28 @@
+# Gradle
+.gradle/
+build/
+app/build/
+**/build/
+
+# Kotlin compiler
+.kotlin/
+
+# Local config
+local.properties
+
+# IDE
+.idea/
+*.iml
+
+# Keystore (don't commit secrets)
+*.jks
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Local agent/design working files
+.agents/
+.impeccable/
+artifacts/
+PROJECT.md
diff --git a/.nojekyll b/.nojekyll
deleted file mode 100644
index 8b13789..0000000
--- a/.nojekyll
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..3900ca5
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,26 @@
+# Contributing to IronLog
+
+Thanks for helping improve IronLog. Changes should preserve three properties: workout logging remains fast, the primary record remains trustworthy, and optional integrations do not become requirements for basic use.
+
+## Before opening a change
+
+1. Search existing issues and pull requests.
+2. Keep the change focused and explain the user-visible outcome.
+3. Do not commit API keys, `local.properties`, keystores, fitness exports, progress photos, or generated build output.
+4. Add or update tests for behavioral changes.
+
+## Local checks
+
+Run the relevant focused tests while developing, then run the full gate before opening a pull request:
+
+```bash
+./gradlew testDebugUnitTest lintDebug assembleDebug
+```
+
+Use `gradlew.bat` on Windows. Release builds require your own local signing material and are not part of the public CI gate.
+
+## Pull requests
+
+Describe the problem, the chosen behavior, risk areas, and how you verified it. Include screenshots or a short recording for visual changes. Body-map, camera, widget, notification, Health Connect, and lifecycle changes should be checked on a real device when possible.
+
+The repository uses a personal-use source license. Opening a contribution does not change the project license or grant rights to the IronLog name, store identity, or signing keys.
diff --git a/DESIGN.md b/DESIGN.md
new file mode 100644
index 0000000..b3ddfc4
--- /dev/null
+++ b/DESIGN.md
@@ -0,0 +1,40 @@
+---
+scope: github-and-product-brand
+source: PRODUCT.md and app/src/main/java/com/ironlog/app/ui/theme/IronLogThemes.kt
+status: active
+---
+
+# IronLog design system
+
+## 1. Direction
+
+IronLog should read like a precise training instrument: dark, direct, and energetic at the moment of action. The visual signature is a forge-orange signal moving through a restrained black-and-steel environment. Recovery green and earned gold appear only when they carry meaning.
+
+## 2. Color
+
+| Role | Dark | Light | Use |
+|---|---:|---:|---|
+| Background | `#000000` | `#F6F7F8` | Main field |
+| Surface | `#0D0D0D` | `#FFFFFF` | Raised information |
+| Border | `#252525` | `#D8DCE1` | Structure |
+| Primary text | `#FFFFFF` | `#111111` | Headlines and values |
+| Secondary text | `#A8A8A8` | `#525861` | Supporting copy |
+| Forge | `#FF4500` | `#D93600` | Primary action and motion |
+| Recovery | `#00C170` | `#087F4D` | Ready/complete states |
+| Earned | `#FFD700` | `#9A6A00` | Milestones only |
+
+## 3. Typography
+
+Use Lexend in the Android product where bundled and system sans-serif in repository graphics. Headlines are heavy and compact; metrics are large with tabular numerals; explanatory text stays regular and readable. All-caps labels are reserved for short operational signals, with visible tracking.
+
+## 4. Shape and layout
+
+Prefer one dominant composition over repeated feature cards. Use 10–18 px radii for product surfaces, 1 px structural borders, and square or pill forms only when they communicate a control or status. Keep the GitHub hero editorial: wordmark and promise on one side, a single animated training instrument on the other.
+
+## 5. Motion
+
+Motion must explain a training loop: load, effort, recovery, record, repeat. Use simple transforms, stroke dashes, and opacity changes; avoid elastic motion and perpetual high-frequency effects. Typical duration is 1.8–6 seconds, with slow ambient rotations no faster than 12 seconds. Under `prefers-reduced-motion`, disable every animation and render the meaningful final state.
+
+## 6. Usage rules
+
+Do not use gradients as decoration, glass effects, emoji icons, stock gym photography, or hand-drawn pseudo-product art. Do not make orange the background of large text areas. Claims in README graphics must match implemented code and current validation. SVGs need semantic titles/descriptions, adaptive colors, unique IDs, and successful XML/render checks before publication.
diff --git a/PRODUCT.md b/PRODUCT.md
new file mode 100644
index 0000000..6150542
--- /dev/null
+++ b/PRODUCT.md
@@ -0,0 +1,48 @@
+---
+type: brand
+audience: lifters who want fast, trustworthy workout tracking without making cloud accounts or subscriptions the center of the experience
+status: active
+---
+
+# IronLog
+
+## Purpose
+
+IronLog is a local-first Android strength-training companion. It helps people record a session quickly, understand recovery, follow a plan, and keep an honest record of their work. The product should feel useful between sets, not like a social feed or a spreadsheet squeezed onto a phone.
+
+## Promise
+
+Train. Recover. Prove it.
+
+IronLog keeps the primary workout record on the device, makes backup and export explicit, and treats intelligence as an optional aid rather than a requirement for basic use.
+
+## Personality
+
+- Disciplined: clear priorities, precise metrics, no ornamental noise.
+- Candid: earned progress is more important than inflated motivation.
+- Forged: dark, tactile, athletic, and durable without becoming aggressive.
+- Capable: powerful features remain understandable during a real workout.
+
+## Visual language
+
+The core identity uses near-black surfaces, hot forge orange, white type, recovery green, and sparing gold. The interface uses strong numeric hierarchy, compact labels, firm borders, and generous breathing room around primary actions. Motion should describe state, progress, or flow; it should never become ambient distraction.
+
+## Content principles
+
+- Lead with the action or outcome.
+- Use plain training language.
+- Make privacy and storage behavior explicit.
+- Separate shipped capabilities from future plans.
+- Avoid hype, fake precision, and claims that depend on unavailable services.
+
+## Anti-references
+
+- Generic neon-gym marketing and smoky bodybuilding imagery.
+- SaaS card grids that give every feature equal weight.
+- Cloud-first language for a product whose core works locally.
+- Gamification detached from completed training.
+- Decorative animation that ignores reduced-motion preferences.
+
+## Accessibility
+
+Public-facing graphics must remain legible in light and dark GitHub themes, preserve useful contrast, avoid communicating status with color alone, and provide a static state when `prefers-reduced-motion` is enabled.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..61c39e7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,104 @@
+
+
+
+
+[](https://github.com/Yannam-Builds/Ironlog/actions/workflows/android.yml)
+
+
+
+[](LICENSE)
+
+**A native Android strength-training companion for fast logging, recovery awareness, plans, and an honest record of the work.**
+
+[Features](#built-for-the-work-between-sets) · [Screens](#the-current-build) · [Architecture](#how-it-is-built) · [Build](#build-it-locally) · [Contributing](CONTRIBUTING.md)
+
+
+
+> [!NOTE]
+> IronLog is under active development and physical-device QA. The signed build is not distributed from this repository yet; build locally or follow a future tagged release.
+
+## Built for the work between sets
+
+IronLog keeps the main training loop fast and keeps the primary record on your device.
+
+- **Log without friction.** Active sessions support sets, load, reps, timers, exercise substitutions, progression suggestions, and resumable foreground tracking.
+- **See recovery, not just history.** Muscle readiness, sleep and biometric inputs, manual check-ins, and Health Connect can inform what to train next.
+- **Work from a plan.** Build programs, choose starter plans, save sessions back to plans, or share compatible plans through bounded QR payloads.
+- **Keep an honest ledger.** Streaks, XP, personal records, milestones, and Forge Fox widgets are derived from completed work.
+- **Own the data.** ObjectBox stores the core record locally. Explicit IronLog backup, restore, import, and export remain available; automatic Android backup is disabled for sensitive fitness and photo data.
+- **Choose the intelligence.** On-device and user-configured cloud AI paths are optional. The workout logger does not require an AI provider.
+
+
+
+## The current build
+
+
+
+
+
+
+
+ Training command center
+ Muscle recovery map
+
+
+
+The July 2026 stabilization pass includes API 36 targeting, transactional workout and import writes, hardened backup/import behavior, corrected readiness and streak clocks, bounded QR decoding, centered recovery-map transforms, and release builds verified on an API 36.1 emulator and a physical Android device.
+
+## How it is built
+
+```mermaid
+flowchart TD
+ UI["Jetpack Compose UI"] --> VM["ViewModels and UI state"]
+ VM --> DOMAIN["Training, recovery, and ledger engines"]
+ DOMAIN --> REPOS["Repositories"]
+ REPOS --> DB[(ObjectBox)]
+ REPOS --> HC["Health Connect"]
+ DOMAIN --> AI["Optional local or cloud AI"]
+ REPOS --> PORT["Backup, import, and export"]
+ DB --> WIDGETS["Glance widgets and workers"]
+```
+
+The app is Kotlin-first and uses Jetpack Compose, ObjectBox, WorkManager, Health Connect, CameraX/ML Kit, Jetpack Glance, Vico, Coil, and Ktor. Java 17 is required for the Android build.
+
+## Build it locally
+
+Requirements: Android Studio with Android SDK 36, JDK 17, and an Android 8.0+ device or emulator.
+
+```bash
+git clone https://github.com/Yannam-Builds/Ironlog.git
+cd Ironlog
+./gradlew testDebugUnitTest lintDebug assembleDebug
+```
+
+On Windows, use `gradlew.bat` instead of `./gradlew`.
+
+Release signing is intentionally local. Create `local.properties` with your own version and signing values and provide your own `app/ironlog-release.jks`; never reuse project-owner signing material.
+
+```properties
+version.code=1
+version.name=1.0.0
+signing.storePassword=your-store-password
+signing.keyPassword=your-key-password
+```
+
+## Verification status
+
+- `:app:lintDebug` passes with no errors.
+- 134 JVM tests pass.
+- Signed, minified APK and AAB builds pass with the private local signing configuration.
+- Fresh onboarding, starter-plan selection, Home, Recovery Map front/back views, muscle hit testing, and landscape recreation were smoke-tested on an API 36.1 Pixel 7 emulator.
+- The latest stable signed APK was installed on a physical device with app data preserved.
+
+Physical-device coverage is still being expanded. See [Security](SECURITY.md) for private vulnerability reporting and [Contributing](CONTRIBUTING.md) before proposing a change.
+
+## Project status
+
+Current priorities are broader physical-device regression testing, signing-key rotation before public store distribution, and final distribution infrastructure. The dated [codebase review](docs/CODEBASE_REVIEW_2026-07-27.md) separates current work from historical implementation notes under `docs/superpowers/`.
+
+---
+
+
+ Train. Recover. Prove it.
+ Built for the record you earn.
+
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..f12a51c
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,22 @@
+# Security policy
+
+## Reporting a vulnerability
+
+Do not open a public issue for a vulnerability that could expose fitness data, progress photos, backup contents, API keys, signing material, or another user's device data.
+
+Email **ironlogsupport@gmail.com** with:
+
+- the affected version or commit;
+- a concise reproduction;
+- the likely impact;
+- any logs or proof of concept with personal data removed.
+
+You should receive an acknowledgement within seven days. Please allow time for validation and a coordinated fix before publishing details.
+
+## Supported code
+
+Security fixes target the current default branch and the latest published build when one exists. Historical branches and untagged artifacts are not supported releases.
+
+## Sensitive files
+
+Release keystores, `local.properties`, provider API keys, user exports, databases, progress photos, and device logs must never be committed. Contributors must use their own signing material for local release builds.
diff --git a/android/.gitkeep b/android/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/.gitkeep b/android/app/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/.gitkeep b/android/app/src/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/debug/.gitkeep b/android/app/src/debug/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/debugOptimized/.gitkeep b/android/app/src/debugOptimized/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/.gitkeep b/android/app/src/main/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/assets/.gitkeep b/android/app/src/main/assets/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/assets/fonts/.gitkeep b/android/app/src/main/assets/fonts/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/.gitkeep b/android/app/src/main/java/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/.gitkeep b/android/app/src/main/java/com/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/ironlog/.gitkeep b/android/app/src/main/java/com/ironlog/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/ironlog/app/.gitkeep b/android/app/src/main/java/com/ironlog/app/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/ironlog/app/backup/.gitkeep b/android/app/src/main/java/com/ironlog/app/backup/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/ironlog/app/config/.gitkeep b/android/app/src/main/java/com/ironlog/app/config/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/java/com/ironlog/app/migration/.gitkeep b/android/app/src/main/java/com/ironlog/app/migration/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/.gitkeep b/android/app/src/main/res/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable-hdpi/.gitkeep b/android/app/src/main/res/drawable-hdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable-mdpi/.gitkeep b/android/app/src/main/res/drawable-mdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable-xhdpi/.gitkeep b/android/app/src/main/res/drawable-xhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable-xxhdpi/.gitkeep b/android/app/src/main/res/drawable-xxhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable-xxxhdpi/.gitkeep b/android/app/src/main/res/drawable-xxxhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/drawable/.gitkeep b/android/app/src/main/res/drawable/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-anydpi-v26/.gitkeep b/android/app/src/main/res/mipmap-anydpi-v26/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-hdpi/.gitkeep b/android/app/src/main/res/mipmap-hdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-mdpi/.gitkeep b/android/app/src/main/res/mipmap-mdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-xhdpi/.gitkeep b/android/app/src/main/res/mipmap-xhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-xxhdpi/.gitkeep b/android/app/src/main/res/mipmap-xxhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/.gitkeep b/android/app/src/main/res/mipmap-xxxhdpi/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/values-night/.gitkeep b/android/app/src/main/res/values-night/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/values-v31/.gitkeep b/android/app/src/main/res/values-v31/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/values/.gitkeep b/android/app/src/main/res/values/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/app/src/main/res/xml/.gitkeep b/android/app/src/main/res/xml/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/gradle/.gitkeep b/android/gradle/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/android/gradle/wrapper/.gitkeep b/android/gradle/wrapper/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/app-demo.js b/app-demo.js
deleted file mode 100644
index c3a2b7f..0000000
--- a/app-demo.js
+++ /dev/null
@@ -1,301 +0,0 @@
-const demoState = {
- tab: "home",
- readiness: 92,
- streak: 7,
- xp: 84,
- level: 8,
- grade: "Iron",
- theme: "amethyst",
-};
-
-const foxAssets = {
- determined: "assets/site/chibi_determined.webp",
- proud: "assets/site/chibi_proud.webp",
- dumbbell: "assets/site/chibi_dumbbell.webp",
- streak: "assets/site/chibi_streak.webp",
- watch: "assets/site/chibi_watch.webp",
-};
-
-const screens = {
- home: {
- kicker: "Daily proof",
- title: "Ready to train",
- metricTitle: "Fresh",
- metricCopy: "Push volume today. Ledger proof is available.",
- fox: "determined",
- render: () => `
-
- Recommended plan
- Upper strength block. Bench press, weighted pullups, row volume.
-
-
-
-
- ${demoState.streak} day streak
- Proof logged before midnight keeps the chain alive.
-
-
- Level ${demoState.level}
- ${demoState.grade} candidate. ${demoState.xp}% to next gate.
-
-
-
- Muscle recovery
- Chest and back are above 90%. Legs are maintaining.
-
-
- `,
- },
- log: {
- kicker: "Workout log",
- title: "Upper strength",
- metricTitle: "Set quality",
- metricCopy: "Every completed set updates proof, XP, and recovery.",
- fox: "dumbbell",
- render: () => `
-
- Bench press
- Set 1 65 kg x 8 Done
- Set 2 67.5 kg x 6 Next
- Complete current set
-
-
- Progression
- Recommended next target: add 2.5 kg if RPE stays below 8.
-
-
- `,
- },
- recovery: {
- kicker: "Recovery map",
- title: "Train or recover",
- metricTitle: "Readiness",
- metricCopy: "Move the slider to preview how the app reacts to recovery state.",
- fox: "watch",
- render: () => `
-
- Manual check-in
- Energy, soreness, and sleep adjust the recommendation.
-
-
- ${demoState.readiness}
-
-
-
-
-
- Front
-
-
-
- Back
-
-
- `,
- },
- ledger: {
- kicker: "Iron Ledger",
- title: "Proof trail",
- metricTitle: `${demoState.grade} grade`,
- metricCopy: "Rank, badges, and integrity follow verified training history.",
- fox: "proud",
- render: () => `
-
-
-
-
Level ${demoState.level}
-
Integrity 100%. ${demoState.xp}% through the current gate.
-
-
-
-
- Training signals
- ${["STR", "PWR", "HYP", "END"].map((signal, index) => `
-
-
${signal}
-
-
${demoState.level + index}
-
- `).join("")}
-
- `,
- },
-};
-
-const els = {
- body: document.body,
- content: document.querySelector("[data-demo-content]"),
- screenTitle: document.querySelector("[data-screen-title]"),
- screenKicker: document.querySelector("[data-screen-kicker]"),
- screenFox: document.querySelector("[data-screen-fox]"),
- readiness: document.querySelector("[data-readiness]"),
- metricTitle: document.querySelector("[data-metric-title]"),
- metricCopy: document.querySelector("[data-metric-copy]"),
- tabs: [...document.querySelectorAll("[data-demo-tab]")],
- themeButtons: [...document.querySelectorAll("[data-theme-choice]")],
-};
-
-function clamp(value, min, max) {
- return Math.max(min, Math.min(max, value));
-}
-
-function setTab(tab) {
- demoState.tab = tab;
- els.tabs.forEach((button) => button.classList.toggle("is-active", button.dataset.demoTab === tab));
- renderDemo(true);
-}
-
-function setFox(assetKey) {
- if (!els.screenFox) return;
-
- els.screenFox.src = foxAssets[assetKey] || foxAssets.determined;
- els.screenFox.classList.remove("is-jumping");
- requestAnimationFrame(() => {
- els.screenFox.classList.add("is-jumping");
- window.setTimeout(() => els.screenFox.classList.remove("is-jumping"), 430);
- });
-}
-
-function renderDemo(animate = false) {
- const screen = screens[demoState.tab];
- if (!screen || !els.content) return;
-
- const doRender = () => {
- els.screenKicker.textContent = screen.kicker;
- els.screenTitle.textContent = screen.title;
- els.readiness.textContent = String(demoState.readiness);
- els.metricTitle.textContent = screen.metricTitle;
- els.metricCopy.textContent = screen.metricCopy;
- els.content.innerHTML = screen.render();
- setFox(screen.fox);
- bindInlineControls();
- };
-
- if (!animate) {
- doRender();
- return;
- }
-
- els.content.classList.add("is-swapping");
- window.setTimeout(() => {
- doRender();
- els.content.classList.remove("is-swapping");
- }, 150);
-}
-
-function completeSet() {
- demoState.xp = clamp(demoState.xp + 6, 0, 100);
- demoState.readiness = clamp(demoState.readiness - 3, 45, 99);
- if (demoState.xp >= 100) {
- demoState.level += 1;
- demoState.xp = 18;
- demoState.grade = demoState.level >= 10 ? "Steel" : "Iron";
- setTab("ledger");
- return;
- }
- renderDemo(true);
-}
-
-function bindInlineControls() {
- const inlineComplete = document.querySelector("[data-inline-complete]");
- if (inlineComplete) {
- inlineComplete.addEventListener("click", completeSet);
- }
-
- const slider = document.querySelector("[data-readiness-slider]");
- const sliderValue = document.querySelector("[data-slider-value]");
- if (slider && sliderValue) {
- slider.addEventListener("input", (event) => {
- demoState.readiness = Number(event.target.value);
- sliderValue.textContent = String(demoState.readiness);
- els.readiness.textContent = String(demoState.readiness);
- els.metricTitle.textContent = demoState.readiness >= 82 ? "Fresh" : demoState.readiness >= 66 ? "Maintain" : "Back off";
- els.metricCopy.textContent = demoState.readiness >= 82
- ? "Good window for heavier work."
- : demoState.readiness >= 66
- ? "Keep quality high and volume controlled."
- : "Recovery circuit is the better move.";
- });
- }
-}
-
-function revealVisibleSections() {
- document.querySelectorAll(".reveal").forEach((element) => element.classList.add("is-visible"));
-}
-
-function setupRevealObserver() {
- const revealElements = [...document.querySelectorAll(".reveal")];
-
- if (!revealElements.length) return;
-
- if (!("IntersectionObserver" in window)) {
- revealVisibleSections();
- return;
- }
-
- const revealObserver = new IntersectionObserver(
- (entries) => {
- entries.forEach((entry) => {
- if (entry.isIntersecting) {
- entry.target.classList.add("is-visible");
- revealObserver.unobserve(entry.target);
- }
- });
- },
- { threshold: 0.18 }
- );
-
- revealElements.forEach((element) => revealObserver.observe(element));
-}
-
-document.querySelectorAll("[data-demo-tab]").forEach((button) => {
- button.addEventListener("click", () => setTab(button.dataset.demoTab));
-});
-
-if (window.location.hash) {
- window.setTimeout(() => {
- document.querySelector(window.location.hash)?.scrollIntoView();
- }, 80);
-}
-
-document.querySelectorAll("[data-quick-action]").forEach((button) => {
- button.addEventListener("click", () => {
- const action = button.dataset.quickAction;
- if (action === "complete") {
- completeSet();
- }
- if (action === "risk") {
- demoState.readiness = 61;
- demoState.streak = Math.max(1, demoState.streak);
- setTab("recovery");
- els.metricTitle.textContent = "Streak risk";
- els.metricCopy.textContent = "A short proof session keeps the daily chain alive.";
- setFox("watch");
- }
- if (action === "level") {
- demoState.level += 1;
- demoState.xp = 12;
- demoState.grade = demoState.level >= 10 ? "Steel" : "Iron";
- setTab("ledger");
- setFox("proud");
- }
- });
-});
-
-els.themeButtons.forEach((button) => {
- button.addEventListener("click", () => {
- demoState.theme = button.dataset.themeChoice;
- document.documentElement.dataset.siteTheme = demoState.theme;
- els.themeButtons.forEach((themeButton) => {
- themeButton.classList.toggle("is-active", themeButton === button);
- });
- });
-});
-
-try {
- renderDemo();
- setupRevealObserver();
-} catch (error) {
- revealVisibleSections();
- console.error("IronLog demo failed to initialize", error);
-}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 0000000..2a13059
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,149 @@
+import java.util.Properties
+
+plugins {
+ id("com.android.application")
+ id("org.jetbrains.kotlin.android")
+ id("org.jetbrains.kotlin.kapt")
+ id("org.jetbrains.kotlin.plugin.serialization")
+ id("org.jetbrains.kotlin.plugin.compose") // Kotlin 2.x Compose compiler plugin
+}
+apply(plugin = "io.objectbox")
+
+// Pin Kotlin/serialization artifacts to 2.1.0 (Kotlin 2.x baseline).
+configurations.all {
+ resolutionStrategy.force(
+ "org.jetbrains.kotlin:kotlin-stdlib:2.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-common:2.1.0",
+ "org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3",
+ "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
+ )
+}
+
+val localProps = Properties().apply {
+ val f = rootProject.file("local.properties")
+ if (f.exists()) load(f.inputStream())
+}
+
+android {
+ namespace = "com.ironlog.app"
+ compileSdk = 36
+
+ defaultConfig {
+ applicationId = "com.ironlogpro.app"
+ minSdk = 26
+ targetSdk = 36
+ versionCode = localProps.getProperty("version.code", "1").toInt()
+ versionName = localProps.getProperty("version.name", "1.0.0")
+ }
+
+ buildFeatures { compose = true; buildConfig = true }
+ // composeOptions.kotlinCompilerExtensionVersion is no longer needed with the
+ // org.jetbrains.kotlin.plugin.compose plugin (Kotlin 2.x). The compiler is
+ // bundled with the plugin and automatically matches the Kotlin version.
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+ kotlinOptions {
+ jvmTarget = "17"
+ }
+
+ signingConfigs {
+ create("release") {
+ storeFile = file("ironlog-release.jks")
+ storePassword = localProps.getProperty("signing.storePassword", "")
+ keyAlias = "Ironlog"
+ keyPassword = localProps.getProperty("signing.keyPassword", "")
+ }
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = true
+ isShrinkResources = true
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro",
+ )
+ signingConfig = signingConfigs.getByName("release")
+ }
+ }
+
+}
+
+dependencies {
+ implementation("androidx.core:core-ktx:1.16.0")
+ implementation("androidx.activity:activity-compose:1.10.1")
+ implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.1")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1")
+ implementation("androidx.navigation:navigation-compose:2.8.9")
+ implementation(platform("androidx.compose:compose-bom:2025.06.01"))
+ implementation("androidx.compose.ui:ui")
+ implementation("androidx.compose.material3:material3")
+ implementation("androidx.compose.foundation:foundation")
+ implementation("androidx.compose.material:material-icons-extended")
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
+ implementation("com.google.code.gson:gson:2.11.0")
+ // Ktor Client — coroutine-native HTTP, replaces raw OkHttp in CloudAiEngine
+ val ktorVersion = "3.1.3"
+ implementation("io.ktor:ktor-client-android:$ktorVersion")
+ implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
+ implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
+ implementation("io.objectbox:objectbox-kotlin:5.4.2")
+ kapt("io.objectbox:objectbox-processor:5.4.2")
+ implementation("androidx.work:work-runtime-ktx:2.9.1")
+
+ // Haze — hardware blur for tab bar frosted glass
+ implementation("dev.chrisbanes.haze:haze:1.6.7")
+
+ // V1 premium UI
+ implementation("com.airbnb.android:lottie-compose:6.7.1")
+ implementation("sh.calvin.reorderable:reorderable:3.1.0")
+ implementation("com.valentinilk.shimmer:compose-shimmer:1.3.1")
+ implementation("io.github.vinceglb:confettikit-android:0.4.0")
+
+ // Gemini Nano on-device inference via Android AICore
+ implementation("com.google.ai.edge.aicore:aicore:0.0.1-exp02")
+
+ // API key encryption — EncryptedSharedPreferences backed by Android Keystore
+ implementation("androidx.security:security-crypto:1.1.0-alpha06")
+
+ // Health Connect (replaces deprecated Google Fit)
+ implementation("androidx.health.connect:connect-client:1.1.0-alpha07")
+
+ // QR code generation (pure-Kotlin, no native dependencies)
+ implementation("io.github.g0dkar:qrcode-kotlin-android:4.2.0")
+
+ // ML Kit Barcode Scanning — camera QR scan
+ implementation("com.google.mlkit:barcode-scanning:17.3.0")
+
+ // CameraX — required by ML Kit scanner
+ implementation("androidx.camera:camera-camera2:1.4.2")
+ implementation("androidx.camera:camera-lifecycle:1.4.2")
+ implementation("androidx.camera:camera-view:1.4.2")
+
+ // Jetpack Glance — Compose-based app widgets
+ implementation("androidx.glance:glance-appwidget:1.1.1")
+ implementation("androidx.glance:glance-material3:1.1.1")
+
+ // Vico — Compose chart library (replaces hand-drawn Canvas charts)
+ implementation("com.patrykandpatrick.vico:compose-m3:2.1.2")
+
+ // Accompanist Permissions — Compose-native permission state (replaces ActivityResultContracts boilerplate)
+ implementation("com.google.accompanist:accompanist-permissions:0.37.2")
+
+ // Coil 3 — async image loading, memory-safe (replaces BitmapFactory boilerplate)
+ implementation("io.coil-kt.coil3:coil-compose:3.2.0")
+ implementation("io.coil-kt.coil3:coil-android:3.2.0") // required for content:// Uri decoding on Android
+
+ implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.2")
+ implementation("com.jakewharton.timber:timber:5.0.1")
+
+ testImplementation("junit:junit:4.13.2")
+
+ // Later / optional — uncomment when needed
+ // implementation("app.rive:rive-android:9.7.2")
+}
diff --git a/app/objectbox-models/default.json b/app/objectbox-models/default.json
new file mode 100644
index 0000000..71bda27
--- /dev/null
+++ b/app/objectbox-models/default.json
@@ -0,0 +1,1176 @@
+{
+ "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
+ "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
+ "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
+ "entities": [
+ {
+ "id": "1:6375078547597424337",
+ "lastPropertyId": "5:17079493708331395",
+ "name": "AppSettingEntity",
+ "properties": [
+ {
+ "id": "1:7742540520026219512",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:1506185647286150166",
+ "name": "key",
+ "indexId": "1:5049298815426413490",
+ "type": 9,
+ "flags": 34848
+ },
+ {
+ "id": "3:4365713378798394968",
+ "name": "value",
+ "type": 9
+ },
+ {
+ "id": "4:3466618677031964009",
+ "name": "valueType",
+ "type": 9
+ },
+ {
+ "id": "5:17079493708331395",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "2:302515929721921433",
+ "lastPropertyId": "11:1212075822830558583",
+ "name": "BodyMeasurementEntity",
+ "properties": [
+ {
+ "id": "1:1130576062898537770",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:7002735551031013151",
+ "name": "uid",
+ "indexId": "2:2161480310796959098",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:1202162678026618492",
+ "name": "measuredAt",
+ "indexId": "3:7005559575458638302",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "4:3369436351573316369",
+ "name": "bodyweight",
+ "type": 8
+ },
+ {
+ "id": "5:4047965594104437000",
+ "name": "waist",
+ "type": 8
+ },
+ {
+ "id": "6:2396368223031782704",
+ "name": "chest",
+ "type": 8
+ },
+ {
+ "id": "7:2401092920189964658",
+ "name": "arm",
+ "type": 8
+ },
+ {
+ "id": "8:4001967161472508852",
+ "name": "thigh",
+ "type": 8
+ },
+ {
+ "id": "9:4887603775309062493",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "10:90164861556050784",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "11:1212075822830558583",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "3:2776827714978953582",
+ "lastPropertyId": "3:7294532530793950561",
+ "name": "DbSmokeTestEntity",
+ "properties": [
+ {
+ "id": "1:3998339153698662456",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:2284681944254414824",
+ "name": "label",
+ "type": 9
+ },
+ {
+ "id": "3:7294532530793950561",
+ "name": "createdAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "4:2611743154182790160",
+ "lastPropertyId": "22:7015189296577759845",
+ "name": "ExerciseEntity",
+ "properties": [
+ {
+ "id": "1:707020838361347369",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:8686808791081191654",
+ "name": "uid",
+ "indexId": "4:7132074033215478825",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:6378664439129185066",
+ "name": "name",
+ "indexId": "5:8365493407371463395",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:4725244426715213154",
+ "name": "normalizedName",
+ "indexId": "6:6776885220009030455",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:4951136480696017650",
+ "name": "primaryMuscle",
+ "indexId": "7:1970750443334186444",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "6:2998988745134536935",
+ "name": "equipment",
+ "indexId": "8:2948446275981894937",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "7:3430537712107722538",
+ "name": "category",
+ "type": 9
+ },
+ {
+ "id": "8:5251491483762025944",
+ "name": "isCustom",
+ "indexId": "9:461564175794847502",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "9:4734001117345052729",
+ "name": "source",
+ "type": 9
+ },
+ {
+ "id": "10:7611015891308048663",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "11:6149860496354979775",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "12:3907671605398701249",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "13:2465688578270422651",
+ "name": "equipmentDetail",
+ "type": 9
+ },
+ {
+ "id": "14:3502121968086585412",
+ "name": "apparatusJson",
+ "type": 9
+ },
+ {
+ "id": "15:8325048520281849311",
+ "name": "trackingType",
+ "type": 9
+ },
+ {
+ "id": "16:3603078725114757033",
+ "name": "isBodyweight",
+ "type": 1
+ },
+ {
+ "id": "17:6352733492945205005",
+ "name": "requiresExternalLoad",
+ "type": 1
+ },
+ {
+ "id": "18:6057663680977537429",
+ "name": "movementPattern",
+ "type": 9
+ },
+ {
+ "id": "19:85311505857371948",
+ "name": "difficulty",
+ "type": 9
+ },
+ {
+ "id": "20:359137109709133643",
+ "name": "aliasesJson",
+ "type": 9
+ },
+ {
+ "id": "21:6440091724420935180",
+ "name": "sourceTagsJson",
+ "type": 9
+ },
+ {
+ "id": "22:7015189296577759845",
+ "name": "secondaryMusclesJson",
+ "type": 9
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "5:8631095935501798316",
+ "lastPropertyId": "9:6465717322369737282",
+ "name": "ExerciseMuscleEntity",
+ "properties": [
+ {
+ "id": "1:8274426856253767721",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:2048096962213666555",
+ "name": "uid",
+ "indexId": "10:6990987628250713075",
+ "type": 9,
+ "flags": 34848
+ },
+ {
+ "id": "3:101629237908960009",
+ "name": "exerciseUid",
+ "indexId": "11:3782810450716833369",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7502942524137374737",
+ "name": "muscle",
+ "indexId": "12:7012750980129844156",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:8168274513786920235",
+ "name": "role",
+ "type": 9
+ },
+ {
+ "id": "6:419721243428278799",
+ "name": "contributionFraction",
+ "type": 8
+ },
+ {
+ "id": "7:106423071448750581",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:4138816793755933269",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "9:6465717322369737282",
+ "name": "exerciseId",
+ "indexId": "13:1318094819683171599",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "6:6570651244400711970",
+ "lastPropertyId": "9:7726916900838342434",
+ "name": "PlanDayEntity",
+ "properties": [
+ {
+ "id": "1:8428790323057535583",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:6713781316084591169",
+ "name": "uid",
+ "indexId": "14:4708930405433038414",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:5596649429300276786",
+ "name": "planUid",
+ "indexId": "15:1170374646201020618",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:4618565955832613535",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "5:2084917564195841564",
+ "name": "color",
+ "type": 9
+ },
+ {
+ "id": "6:8217789439750490373",
+ "name": "orderIndex",
+ "indexId": "16:2934401188564034565",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "7:598708148343689483",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:2705189211186920977",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "9:7726916900838342434",
+ "name": "planId",
+ "indexId": "17:1172575833296806094",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "7:2309357112192973168",
+ "lastPropertyId": "8:3400899846978005693",
+ "name": "PlanEntity",
+ "properties": [
+ {
+ "id": "1:5230162920711976621",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:230772893546029768",
+ "name": "uid",
+ "indexId": "18:6786941208543501239",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:959653943456243202",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "4:3571178027715349395",
+ "name": "goal",
+ "type": 9
+ },
+ {
+ "id": "5:1536087741652199157",
+ "name": "description",
+ "type": 9
+ },
+ {
+ "id": "6:513307857960897590",
+ "name": "isActive",
+ "indexId": "19:3989058999613216512",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "7:5040926330099815887",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:3400899846978005693",
+ "name": "updatedAt",
+ "indexId": "20:4423634925057715172",
+ "type": 6,
+ "flags": 8
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "8:5642091058245945037",
+ "lastPropertyId": "15:7982953182248628598",
+ "name": "PlanExerciseEntity",
+ "properties": [
+ {
+ "id": "1:5071294513351235515",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:3202045242703233318",
+ "name": "uid",
+ "indexId": "21:304590405260949575",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:8222477767718912412",
+ "name": "planDayUid",
+ "indexId": "22:1845388010696193065",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:1002880908358576484",
+ "name": "exerciseUid",
+ "indexId": "23:4431756976114034537",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:5357654532262209906",
+ "name": "orderIndex",
+ "indexId": "24:7624470436801051403",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "6:6984689457390584612",
+ "name": "sets",
+ "type": 5
+ },
+ {
+ "id": "7:6365967288573418627",
+ "name": "reps",
+ "type": 9
+ },
+ {
+ "id": "8:305845508335874805",
+ "name": "restSeconds",
+ "type": 5
+ },
+ {
+ "id": "9:6146596943296265001",
+ "name": "supersetGroup",
+ "type": 9
+ },
+ {
+ "id": "10:1318994208334733938",
+ "name": "isWarmup",
+ "type": 1
+ },
+ {
+ "id": "11:4663791005614629538",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "12:2039237830902713370",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "13:4454896248020535574",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "14:760941413455639622",
+ "name": "planDayId",
+ "indexId": "25:87929194468686219",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanDayEntity"
+ },
+ {
+ "id": "15:7982953182248628598",
+ "name": "exerciseId",
+ "indexId": "26:6009269294358758361",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "9:4539425119869419764",
+ "lastPropertyId": "8:292678578060526509",
+ "name": "ProgressPhotoEntity",
+ "properties": [
+ {
+ "id": "1:5494904852557629796",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:175972985349033470",
+ "name": "uid",
+ "indexId": "27:687419790969163709",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:3717031907422351170",
+ "name": "fileUri",
+ "type": 9
+ },
+ {
+ "id": "4:5688752858919753694",
+ "name": "takenAt",
+ "indexId": "28:1626483308514503498",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "5:2548186096965648050",
+ "name": "bodyweight",
+ "type": 8
+ },
+ {
+ "id": "6:9146382119571494830",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "7:4210445366891782807",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:292678578060526509",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "10:8896672983816278611",
+ "lastPropertyId": "16:1999541678396910812",
+ "name": "WorkoutEntity",
+ "properties": [
+ {
+ "id": "1:9170482815713570413",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:8953567437095390656",
+ "name": "uid",
+ "indexId": "29:1304477636819706961",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:730259752772027732",
+ "name": "planUid",
+ "indexId": "30:5331943758443322541",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7548509774931883365",
+ "name": "planDayUid",
+ "indexId": "31:970724848359515934",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:6826067441618715582",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "6:2882884329284383374",
+ "name": "startedAt",
+ "indexId": "32:3623862218936235916",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "7:2975769613296758001",
+ "name": "completedAt",
+ "type": 6
+ },
+ {
+ "id": "8:2781354287316497412",
+ "name": "durationSeconds",
+ "type": 5
+ },
+ {
+ "id": "9:987891453695385349",
+ "name": "rating",
+ "type": 8
+ },
+ {
+ "id": "10:4394575519908125655",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "11:3528795408108132268",
+ "name": "status",
+ "indexId": "33:99442323983545284",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "12:9031113332705334533",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "13:6370380062255031895",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "14:1794134261713451605",
+ "name": "planId",
+ "indexId": "34:7150481635002111418",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanEntity"
+ },
+ {
+ "id": "15:2664564091801544337",
+ "name": "planDayId",
+ "indexId": "35:6005115109596506198",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanDayEntity"
+ },
+ {
+ "id": "16:1999541678396910812",
+ "name": "imported",
+ "type": 1
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "11:4741913948774127407",
+ "lastPropertyId": "11:621276958343896092",
+ "name": "WorkoutExerciseEntity",
+ "properties": [
+ {
+ "id": "1:7464516990309689993",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:3491438182960818812",
+ "name": "uid",
+ "indexId": "36:421058826231474802",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:6887240933183881732",
+ "name": "workoutUid",
+ "indexId": "37:3363423963746750088",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7587133369804765978",
+ "name": "exerciseUid",
+ "indexId": "38:7985944065281696022",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:8183794936877277097",
+ "name": "orderIndex",
+ "indexId": "39:7269429662349370187",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "6:2624899628615480306",
+ "name": "supersetGroup",
+ "type": 9
+ },
+ {
+ "id": "7:7306694230480957983",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "8:3203356354807555103",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "9:5230424591224576166",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "10:2116151153414940385",
+ "name": "workoutId",
+ "indexId": "40:3944651843168485357",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "WorkoutEntity"
+ },
+ {
+ "id": "11:621276958343896092",
+ "name": "exerciseId",
+ "indexId": "41:6525490956396544282",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "12:4360833741220823326",
+ "lastPropertyId": "17:5498549554904472762",
+ "name": "WorkoutSetEntity",
+ "properties": [
+ {
+ "id": "1:4626736428916203101",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5346374336183447602",
+ "name": "uid",
+ "indexId": "42:2131922783263931925",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:5618714557746405252",
+ "name": "workoutExerciseUid",
+ "indexId": "43:1920467783060483230",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7019894755280663324",
+ "name": "setIndex",
+ "indexId": "44:1947623668304261528",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "5:8578473842864728696",
+ "name": "weight",
+ "type": 8
+ },
+ {
+ "id": "6:8210998745392447185",
+ "name": "reps",
+ "type": 8
+ },
+ {
+ "id": "7:1383989929661473426",
+ "name": "rpe",
+ "type": 8
+ },
+ {
+ "id": "8:8319954115125233190",
+ "name": "rir",
+ "type": 8
+ },
+ {
+ "id": "9:2478622815753987363",
+ "name": "restSeconds",
+ "type": 5
+ },
+ {
+ "id": "10:2393261358309395291",
+ "name": "isWarmup",
+ "indexId": "45:2655474054443381086",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "11:2789832380678253136",
+ "name": "isDropset",
+ "type": 1
+ },
+ {
+ "id": "12:600594436099191511",
+ "name": "isAmrap",
+ "type": 1
+ },
+ {
+ "id": "13:562173916802785475",
+ "name": "toFailure",
+ "type": 1
+ },
+ {
+ "id": "14:7771050552602058712",
+ "name": "completedAt",
+ "type": 6
+ },
+ {
+ "id": "15:5045205436875128579",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "16:3655167121615541243",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "17:5498549554904472762",
+ "name": "workoutExerciseId",
+ "indexId": "46:1969267965260840604",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "WorkoutExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "13:872393084237455310",
+ "lastPropertyId": "13:8058996708874307559",
+ "name": "GamificationProfileEntity",
+ "properties": [
+ {
+ "id": "1:4420681973009124567",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5581856577428156502",
+ "name": "offlineUserId",
+ "indexId": "47:7996134452892434897",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:3439692452007655530",
+ "name": "totalXp",
+ "type": 6
+ },
+ {
+ "id": "4:8269480094590442427",
+ "name": "level",
+ "type": 5
+ },
+ {
+ "id": "5:6560246734718259827",
+ "name": "xpInLevel",
+ "type": 6
+ },
+ {
+ "id": "6:3346618059051021487",
+ "name": "rank",
+ "type": 9
+ },
+ {
+ "id": "7:963411976398449338",
+ "name": "activeTitle",
+ "type": 9
+ },
+ {
+ "id": "8:8288198492989634710",
+ "name": "statsJson",
+ "type": 9
+ },
+ {
+ "id": "9:63936376127024961",
+ "name": "weeklyXp",
+ "type": 5
+ },
+ {
+ "id": "10:8460930991603249917",
+ "name": "weeklyXpResetWeek",
+ "type": 9
+ },
+ {
+ "id": "11:7666440753031599367",
+ "name": "streakWeeks",
+ "type": 5
+ },
+ {
+ "id": "12:6171387056460869585",
+ "name": "makeupCompletionsJson",
+ "type": 9
+ },
+ {
+ "id": "13:8058996708874307559",
+ "name": "unlockedBadges",
+ "type": 9
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "15:3303933602031657554",
+ "lastPropertyId": "19:6205034933046485444",
+ "name": "AthleteCalibrationEntity",
+ "properties": [
+ {
+ "id": "1:3827532953057363661",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5078454025712408421",
+ "name": "offlineUserId",
+ "indexId": "48:2797616992507402666",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:7536905653511905638",
+ "name": "trainingAgeMonths",
+ "type": 5
+ },
+ {
+ "id": "4:770717731337440208",
+ "name": "firstVerifiedSessionAt",
+ "type": 6
+ },
+ {
+ "id": "5:8006972148803772392",
+ "name": "weightUnit",
+ "type": 9
+ },
+ {
+ "id": "6:2990630982597146260",
+ "name": "bodyweightKg",
+ "type": 8
+ },
+ {
+ "id": "7:936944022977183748",
+ "name": "goalMode",
+ "type": 9
+ },
+ {
+ "id": "8:63072361060061501",
+ "name": "weeklyGoalDays",
+ "type": 5
+ },
+ {
+ "id": "9:1287460578734026252",
+ "name": "importedHistory",
+ "type": 1
+ },
+ {
+ "id": "10:5524069434125522240",
+ "name": "confidence",
+ "type": 8
+ },
+ {
+ "id": "11:6581969964691433784",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "12:4741176203616204863",
+ "name": "hasPastTraining",
+ "type": 1
+ },
+ {
+ "id": "13:5813023527605646507",
+ "name": "hasGymAccess",
+ "type": 1
+ },
+ {
+ "id": "14:1159119518610722754",
+ "name": "baselinePushups",
+ "type": 5
+ },
+ {
+ "id": "15:7164010130302322246",
+ "name": "baselinePullups",
+ "type": 5
+ },
+ {
+ "id": "16:4733081696383155826",
+ "name": "baselineBenchKg",
+ "type": 5
+ },
+ {
+ "id": "17:2469407931951061224",
+ "name": "baselineLatPulldownKg",
+ "type": 5
+ },
+ {
+ "id": "18:5488276568647307231",
+ "name": "baselineMileRunSeconds",
+ "type": 5
+ },
+ {
+ "id": "19:6205034933046485444",
+ "name": "historicalTrainingDaysPerWeek",
+ "type": 5
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "16:5759065875517646429",
+ "lastPropertyId": "12:4155430192547483927",
+ "name": "IronLedgerEventEntity",
+ "properties": [
+ {
+ "id": "1:211267648957640289",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:7891121349817722156",
+ "name": "eventId",
+ "indexId": "49:3320730592556355093",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:422406808856606259",
+ "name": "sourceType",
+ "indexId": "50:1912751806984890698",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:8409752256982048584",
+ "name": "sourceId",
+ "indexId": "51:9104188331982479815",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:4871368561614387169",
+ "name": "eventKind",
+ "indexId": "52:4130863557055800333",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "6:1782006764642706504",
+ "name": "occurredAt",
+ "indexId": "53:3101713585028288796",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "7:3581981213273908444",
+ "name": "xpDelta",
+ "type": 5
+ },
+ {
+ "id": "8:4343578316348105",
+ "name": "statDeltasJson",
+ "type": 9
+ },
+ {
+ "id": "9:3755353096104464687",
+ "name": "trustScore",
+ "type": 8
+ },
+ {
+ "id": "10:4028109913350867797",
+ "name": "fingerprint",
+ "indexId": "54:996889235122584713",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "11:759123915799413798",
+ "name": "metadataJson",
+ "type": 9
+ },
+ {
+ "id": "12:4155430192547483927",
+ "name": "invalidated",
+ "indexId": "55:7679737323583470378",
+ "type": 1,
+ "flags": 8
+ }
+ ],
+ "relations": []
+ }
+ ],
+ "lastEntityId": "16:5759065875517646429",
+ "lastIndexId": "55:7679737323583470378",
+ "lastRelationId": "0:0",
+ "lastSequenceId": "0:0",
+ "modelVersion": 5,
+ "modelVersionParserMinimum": 5,
+ "retiredEntityUids": [
+ 885356565461564884
+ ],
+ "retiredIndexUids": [],
+ "retiredPropertyUids": [
+ 8743783797112242118,
+ 6362880859759003247,
+ 6216156919604802650,
+ 1447604901136741389,
+ 6825076196334837396,
+ 1279230704031176310,
+ 7102108765480323005,
+ 4485041613321335939,
+ 1192629098759155910,
+ 7199381384699893764,
+ 353580902206095814
+ ],
+ "retiredRelationUids": [],
+ "version": 1
+}
\ No newline at end of file
diff --git a/app/objectbox-models/default.json.bak b/app/objectbox-models/default.json.bak
new file mode 100644
index 0000000..71bda27
--- /dev/null
+++ b/app/objectbox-models/default.json.bak
@@ -0,0 +1,1176 @@
+{
+ "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
+ "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
+ "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
+ "entities": [
+ {
+ "id": "1:6375078547597424337",
+ "lastPropertyId": "5:17079493708331395",
+ "name": "AppSettingEntity",
+ "properties": [
+ {
+ "id": "1:7742540520026219512",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:1506185647286150166",
+ "name": "key",
+ "indexId": "1:5049298815426413490",
+ "type": 9,
+ "flags": 34848
+ },
+ {
+ "id": "3:4365713378798394968",
+ "name": "value",
+ "type": 9
+ },
+ {
+ "id": "4:3466618677031964009",
+ "name": "valueType",
+ "type": 9
+ },
+ {
+ "id": "5:17079493708331395",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "2:302515929721921433",
+ "lastPropertyId": "11:1212075822830558583",
+ "name": "BodyMeasurementEntity",
+ "properties": [
+ {
+ "id": "1:1130576062898537770",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:7002735551031013151",
+ "name": "uid",
+ "indexId": "2:2161480310796959098",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:1202162678026618492",
+ "name": "measuredAt",
+ "indexId": "3:7005559575458638302",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "4:3369436351573316369",
+ "name": "bodyweight",
+ "type": 8
+ },
+ {
+ "id": "5:4047965594104437000",
+ "name": "waist",
+ "type": 8
+ },
+ {
+ "id": "6:2396368223031782704",
+ "name": "chest",
+ "type": 8
+ },
+ {
+ "id": "7:2401092920189964658",
+ "name": "arm",
+ "type": 8
+ },
+ {
+ "id": "8:4001967161472508852",
+ "name": "thigh",
+ "type": 8
+ },
+ {
+ "id": "9:4887603775309062493",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "10:90164861556050784",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "11:1212075822830558583",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "3:2776827714978953582",
+ "lastPropertyId": "3:7294532530793950561",
+ "name": "DbSmokeTestEntity",
+ "properties": [
+ {
+ "id": "1:3998339153698662456",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:2284681944254414824",
+ "name": "label",
+ "type": 9
+ },
+ {
+ "id": "3:7294532530793950561",
+ "name": "createdAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "4:2611743154182790160",
+ "lastPropertyId": "22:7015189296577759845",
+ "name": "ExerciseEntity",
+ "properties": [
+ {
+ "id": "1:707020838361347369",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:8686808791081191654",
+ "name": "uid",
+ "indexId": "4:7132074033215478825",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:6378664439129185066",
+ "name": "name",
+ "indexId": "5:8365493407371463395",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:4725244426715213154",
+ "name": "normalizedName",
+ "indexId": "6:6776885220009030455",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:4951136480696017650",
+ "name": "primaryMuscle",
+ "indexId": "7:1970750443334186444",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "6:2998988745134536935",
+ "name": "equipment",
+ "indexId": "8:2948446275981894937",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "7:3430537712107722538",
+ "name": "category",
+ "type": 9
+ },
+ {
+ "id": "8:5251491483762025944",
+ "name": "isCustom",
+ "indexId": "9:461564175794847502",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "9:4734001117345052729",
+ "name": "source",
+ "type": 9
+ },
+ {
+ "id": "10:7611015891308048663",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "11:6149860496354979775",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "12:3907671605398701249",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "13:2465688578270422651",
+ "name": "equipmentDetail",
+ "type": 9
+ },
+ {
+ "id": "14:3502121968086585412",
+ "name": "apparatusJson",
+ "type": 9
+ },
+ {
+ "id": "15:8325048520281849311",
+ "name": "trackingType",
+ "type": 9
+ },
+ {
+ "id": "16:3603078725114757033",
+ "name": "isBodyweight",
+ "type": 1
+ },
+ {
+ "id": "17:6352733492945205005",
+ "name": "requiresExternalLoad",
+ "type": 1
+ },
+ {
+ "id": "18:6057663680977537429",
+ "name": "movementPattern",
+ "type": 9
+ },
+ {
+ "id": "19:85311505857371948",
+ "name": "difficulty",
+ "type": 9
+ },
+ {
+ "id": "20:359137109709133643",
+ "name": "aliasesJson",
+ "type": 9
+ },
+ {
+ "id": "21:6440091724420935180",
+ "name": "sourceTagsJson",
+ "type": 9
+ },
+ {
+ "id": "22:7015189296577759845",
+ "name": "secondaryMusclesJson",
+ "type": 9
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "5:8631095935501798316",
+ "lastPropertyId": "9:6465717322369737282",
+ "name": "ExerciseMuscleEntity",
+ "properties": [
+ {
+ "id": "1:8274426856253767721",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:2048096962213666555",
+ "name": "uid",
+ "indexId": "10:6990987628250713075",
+ "type": 9,
+ "flags": 34848
+ },
+ {
+ "id": "3:101629237908960009",
+ "name": "exerciseUid",
+ "indexId": "11:3782810450716833369",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7502942524137374737",
+ "name": "muscle",
+ "indexId": "12:7012750980129844156",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:8168274513786920235",
+ "name": "role",
+ "type": 9
+ },
+ {
+ "id": "6:419721243428278799",
+ "name": "contributionFraction",
+ "type": 8
+ },
+ {
+ "id": "7:106423071448750581",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:4138816793755933269",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "9:6465717322369737282",
+ "name": "exerciseId",
+ "indexId": "13:1318094819683171599",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "6:6570651244400711970",
+ "lastPropertyId": "9:7726916900838342434",
+ "name": "PlanDayEntity",
+ "properties": [
+ {
+ "id": "1:8428790323057535583",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:6713781316084591169",
+ "name": "uid",
+ "indexId": "14:4708930405433038414",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:5596649429300276786",
+ "name": "planUid",
+ "indexId": "15:1170374646201020618",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:4618565955832613535",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "5:2084917564195841564",
+ "name": "color",
+ "type": 9
+ },
+ {
+ "id": "6:8217789439750490373",
+ "name": "orderIndex",
+ "indexId": "16:2934401188564034565",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "7:598708148343689483",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:2705189211186920977",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "9:7726916900838342434",
+ "name": "planId",
+ "indexId": "17:1172575833296806094",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "7:2309357112192973168",
+ "lastPropertyId": "8:3400899846978005693",
+ "name": "PlanEntity",
+ "properties": [
+ {
+ "id": "1:5230162920711976621",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:230772893546029768",
+ "name": "uid",
+ "indexId": "18:6786941208543501239",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:959653943456243202",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "4:3571178027715349395",
+ "name": "goal",
+ "type": 9
+ },
+ {
+ "id": "5:1536087741652199157",
+ "name": "description",
+ "type": 9
+ },
+ {
+ "id": "6:513307857960897590",
+ "name": "isActive",
+ "indexId": "19:3989058999613216512",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "7:5040926330099815887",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:3400899846978005693",
+ "name": "updatedAt",
+ "indexId": "20:4423634925057715172",
+ "type": 6,
+ "flags": 8
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "8:5642091058245945037",
+ "lastPropertyId": "15:7982953182248628598",
+ "name": "PlanExerciseEntity",
+ "properties": [
+ {
+ "id": "1:5071294513351235515",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:3202045242703233318",
+ "name": "uid",
+ "indexId": "21:304590405260949575",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:8222477767718912412",
+ "name": "planDayUid",
+ "indexId": "22:1845388010696193065",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:1002880908358576484",
+ "name": "exerciseUid",
+ "indexId": "23:4431756976114034537",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:5357654532262209906",
+ "name": "orderIndex",
+ "indexId": "24:7624470436801051403",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "6:6984689457390584612",
+ "name": "sets",
+ "type": 5
+ },
+ {
+ "id": "7:6365967288573418627",
+ "name": "reps",
+ "type": 9
+ },
+ {
+ "id": "8:305845508335874805",
+ "name": "restSeconds",
+ "type": 5
+ },
+ {
+ "id": "9:6146596943296265001",
+ "name": "supersetGroup",
+ "type": 9
+ },
+ {
+ "id": "10:1318994208334733938",
+ "name": "isWarmup",
+ "type": 1
+ },
+ {
+ "id": "11:4663791005614629538",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "12:2039237830902713370",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "13:4454896248020535574",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "14:760941413455639622",
+ "name": "planDayId",
+ "indexId": "25:87929194468686219",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanDayEntity"
+ },
+ {
+ "id": "15:7982953182248628598",
+ "name": "exerciseId",
+ "indexId": "26:6009269294358758361",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "9:4539425119869419764",
+ "lastPropertyId": "8:292678578060526509",
+ "name": "ProgressPhotoEntity",
+ "properties": [
+ {
+ "id": "1:5494904852557629796",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:175972985349033470",
+ "name": "uid",
+ "indexId": "27:687419790969163709",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:3717031907422351170",
+ "name": "fileUri",
+ "type": 9
+ },
+ {
+ "id": "4:5688752858919753694",
+ "name": "takenAt",
+ "indexId": "28:1626483308514503498",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "5:2548186096965648050",
+ "name": "bodyweight",
+ "type": 8
+ },
+ {
+ "id": "6:9146382119571494830",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "7:4210445366891782807",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "8:292678578060526509",
+ "name": "updatedAt",
+ "type": 6
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "10:8896672983816278611",
+ "lastPropertyId": "16:1999541678396910812",
+ "name": "WorkoutEntity",
+ "properties": [
+ {
+ "id": "1:9170482815713570413",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:8953567437095390656",
+ "name": "uid",
+ "indexId": "29:1304477636819706961",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:730259752772027732",
+ "name": "planUid",
+ "indexId": "30:5331943758443322541",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7548509774931883365",
+ "name": "planDayUid",
+ "indexId": "31:970724848359515934",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:6826067441618715582",
+ "name": "name",
+ "type": 9
+ },
+ {
+ "id": "6:2882884329284383374",
+ "name": "startedAt",
+ "indexId": "32:3623862218936235916",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "7:2975769613296758001",
+ "name": "completedAt",
+ "type": 6
+ },
+ {
+ "id": "8:2781354287316497412",
+ "name": "durationSeconds",
+ "type": 5
+ },
+ {
+ "id": "9:987891453695385349",
+ "name": "rating",
+ "type": 8
+ },
+ {
+ "id": "10:4394575519908125655",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "11:3528795408108132268",
+ "name": "status",
+ "indexId": "33:99442323983545284",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "12:9031113332705334533",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "13:6370380062255031895",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "14:1794134261713451605",
+ "name": "planId",
+ "indexId": "34:7150481635002111418",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanEntity"
+ },
+ {
+ "id": "15:2664564091801544337",
+ "name": "planDayId",
+ "indexId": "35:6005115109596506198",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "PlanDayEntity"
+ },
+ {
+ "id": "16:1999541678396910812",
+ "name": "imported",
+ "type": 1
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "11:4741913948774127407",
+ "lastPropertyId": "11:621276958343896092",
+ "name": "WorkoutExerciseEntity",
+ "properties": [
+ {
+ "id": "1:7464516990309689993",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:3491438182960818812",
+ "name": "uid",
+ "indexId": "36:421058826231474802",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:6887240933183881732",
+ "name": "workoutUid",
+ "indexId": "37:3363423963746750088",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7587133369804765978",
+ "name": "exerciseUid",
+ "indexId": "38:7985944065281696022",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:8183794936877277097",
+ "name": "orderIndex",
+ "indexId": "39:7269429662349370187",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "6:2624899628615480306",
+ "name": "supersetGroup",
+ "type": 9
+ },
+ {
+ "id": "7:7306694230480957983",
+ "name": "notes",
+ "type": 9
+ },
+ {
+ "id": "8:3203356354807555103",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "9:5230424591224576166",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "10:2116151153414940385",
+ "name": "workoutId",
+ "indexId": "40:3944651843168485357",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "WorkoutEntity"
+ },
+ {
+ "id": "11:621276958343896092",
+ "name": "exerciseId",
+ "indexId": "41:6525490956396544282",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "ExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "12:4360833741220823326",
+ "lastPropertyId": "17:5498549554904472762",
+ "name": "WorkoutSetEntity",
+ "properties": [
+ {
+ "id": "1:4626736428916203101",
+ "name": "objectBoxId",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5346374336183447602",
+ "name": "uid",
+ "indexId": "42:2131922783263931925",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:5618714557746405252",
+ "name": "workoutExerciseUid",
+ "indexId": "43:1920467783060483230",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:7019894755280663324",
+ "name": "setIndex",
+ "indexId": "44:1947623668304261528",
+ "type": 5,
+ "flags": 8
+ },
+ {
+ "id": "5:8578473842864728696",
+ "name": "weight",
+ "type": 8
+ },
+ {
+ "id": "6:8210998745392447185",
+ "name": "reps",
+ "type": 8
+ },
+ {
+ "id": "7:1383989929661473426",
+ "name": "rpe",
+ "type": 8
+ },
+ {
+ "id": "8:8319954115125233190",
+ "name": "rir",
+ "type": 8
+ },
+ {
+ "id": "9:2478622815753987363",
+ "name": "restSeconds",
+ "type": 5
+ },
+ {
+ "id": "10:2393261358309395291",
+ "name": "isWarmup",
+ "indexId": "45:2655474054443381086",
+ "type": 1,
+ "flags": 8
+ },
+ {
+ "id": "11:2789832380678253136",
+ "name": "isDropset",
+ "type": 1
+ },
+ {
+ "id": "12:600594436099191511",
+ "name": "isAmrap",
+ "type": 1
+ },
+ {
+ "id": "13:562173916802785475",
+ "name": "toFailure",
+ "type": 1
+ },
+ {
+ "id": "14:7771050552602058712",
+ "name": "completedAt",
+ "type": 6
+ },
+ {
+ "id": "15:5045205436875128579",
+ "name": "createdAt",
+ "type": 6
+ },
+ {
+ "id": "16:3655167121615541243",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "17:5498549554904472762",
+ "name": "workoutExerciseId",
+ "indexId": "46:1969267965260840604",
+ "type": 11,
+ "flags": 520,
+ "relationTarget": "WorkoutExerciseEntity"
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "13:872393084237455310",
+ "lastPropertyId": "13:8058996708874307559",
+ "name": "GamificationProfileEntity",
+ "properties": [
+ {
+ "id": "1:4420681973009124567",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5581856577428156502",
+ "name": "offlineUserId",
+ "indexId": "47:7996134452892434897",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:3439692452007655530",
+ "name": "totalXp",
+ "type": 6
+ },
+ {
+ "id": "4:8269480094590442427",
+ "name": "level",
+ "type": 5
+ },
+ {
+ "id": "5:6560246734718259827",
+ "name": "xpInLevel",
+ "type": 6
+ },
+ {
+ "id": "6:3346618059051021487",
+ "name": "rank",
+ "type": 9
+ },
+ {
+ "id": "7:963411976398449338",
+ "name": "activeTitle",
+ "type": 9
+ },
+ {
+ "id": "8:8288198492989634710",
+ "name": "statsJson",
+ "type": 9
+ },
+ {
+ "id": "9:63936376127024961",
+ "name": "weeklyXp",
+ "type": 5
+ },
+ {
+ "id": "10:8460930991603249917",
+ "name": "weeklyXpResetWeek",
+ "type": 9
+ },
+ {
+ "id": "11:7666440753031599367",
+ "name": "streakWeeks",
+ "type": 5
+ },
+ {
+ "id": "12:6171387056460869585",
+ "name": "makeupCompletionsJson",
+ "type": 9
+ },
+ {
+ "id": "13:8058996708874307559",
+ "name": "unlockedBadges",
+ "type": 9
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "15:3303933602031657554",
+ "lastPropertyId": "19:6205034933046485444",
+ "name": "AthleteCalibrationEntity",
+ "properties": [
+ {
+ "id": "1:3827532953057363661",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:5078454025712408421",
+ "name": "offlineUserId",
+ "indexId": "48:2797616992507402666",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:7536905653511905638",
+ "name": "trainingAgeMonths",
+ "type": 5
+ },
+ {
+ "id": "4:770717731337440208",
+ "name": "firstVerifiedSessionAt",
+ "type": 6
+ },
+ {
+ "id": "5:8006972148803772392",
+ "name": "weightUnit",
+ "type": 9
+ },
+ {
+ "id": "6:2990630982597146260",
+ "name": "bodyweightKg",
+ "type": 8
+ },
+ {
+ "id": "7:936944022977183748",
+ "name": "goalMode",
+ "type": 9
+ },
+ {
+ "id": "8:63072361060061501",
+ "name": "weeklyGoalDays",
+ "type": 5
+ },
+ {
+ "id": "9:1287460578734026252",
+ "name": "importedHistory",
+ "type": 1
+ },
+ {
+ "id": "10:5524069434125522240",
+ "name": "confidence",
+ "type": 8
+ },
+ {
+ "id": "11:6581969964691433784",
+ "name": "updatedAt",
+ "type": 6
+ },
+ {
+ "id": "12:4741176203616204863",
+ "name": "hasPastTraining",
+ "type": 1
+ },
+ {
+ "id": "13:5813023527605646507",
+ "name": "hasGymAccess",
+ "type": 1
+ },
+ {
+ "id": "14:1159119518610722754",
+ "name": "baselinePushups",
+ "type": 5
+ },
+ {
+ "id": "15:7164010130302322246",
+ "name": "baselinePullups",
+ "type": 5
+ },
+ {
+ "id": "16:4733081696383155826",
+ "name": "baselineBenchKg",
+ "type": 5
+ },
+ {
+ "id": "17:2469407931951061224",
+ "name": "baselineLatPulldownKg",
+ "type": 5
+ },
+ {
+ "id": "18:5488276568647307231",
+ "name": "baselineMileRunSeconds",
+ "type": 5
+ },
+ {
+ "id": "19:6205034933046485444",
+ "name": "historicalTrainingDaysPerWeek",
+ "type": 5
+ }
+ ],
+ "relations": []
+ },
+ {
+ "id": "16:5759065875517646429",
+ "lastPropertyId": "12:4155430192547483927",
+ "name": "IronLedgerEventEntity",
+ "properties": [
+ {
+ "id": "1:211267648957640289",
+ "name": "id",
+ "type": 6,
+ "flags": 1
+ },
+ {
+ "id": "2:7891121349817722156",
+ "name": "eventId",
+ "indexId": "49:3320730592556355093",
+ "type": 9,
+ "flags": 2080
+ },
+ {
+ "id": "3:422406808856606259",
+ "name": "sourceType",
+ "indexId": "50:1912751806984890698",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "4:8409752256982048584",
+ "name": "sourceId",
+ "indexId": "51:9104188331982479815",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "5:4871368561614387169",
+ "name": "eventKind",
+ "indexId": "52:4130863557055800333",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "6:1782006764642706504",
+ "name": "occurredAt",
+ "indexId": "53:3101713585028288796",
+ "type": 6,
+ "flags": 8
+ },
+ {
+ "id": "7:3581981213273908444",
+ "name": "xpDelta",
+ "type": 5
+ },
+ {
+ "id": "8:4343578316348105",
+ "name": "statDeltasJson",
+ "type": 9
+ },
+ {
+ "id": "9:3755353096104464687",
+ "name": "trustScore",
+ "type": 8
+ },
+ {
+ "id": "10:4028109913350867797",
+ "name": "fingerprint",
+ "indexId": "54:996889235122584713",
+ "type": 9,
+ "flags": 2048
+ },
+ {
+ "id": "11:759123915799413798",
+ "name": "metadataJson",
+ "type": 9
+ },
+ {
+ "id": "12:4155430192547483927",
+ "name": "invalidated",
+ "indexId": "55:7679737323583470378",
+ "type": 1,
+ "flags": 8
+ }
+ ],
+ "relations": []
+ }
+ ],
+ "lastEntityId": "16:5759065875517646429",
+ "lastIndexId": "55:7679737323583470378",
+ "lastRelationId": "0:0",
+ "lastSequenceId": "0:0",
+ "modelVersion": 5,
+ "modelVersionParserMinimum": 5,
+ "retiredEntityUids": [
+ 885356565461564884
+ ],
+ "retiredIndexUids": [],
+ "retiredPropertyUids": [
+ 8743783797112242118,
+ 6362880859759003247,
+ 6216156919604802650,
+ 1447604901136741389,
+ 6825076196334837396,
+ 1279230704031176310,
+ 7102108765480323005,
+ 4485041613321335939,
+ 1192629098759155910,
+ 7199381384699893764,
+ 353580902206095814
+ ],
+ "retiredRelationUids": [],
+ "version": 1
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..fe76cd3
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,109 @@
+# IronLog ProGuard / R8 rules
+
+# ── ObjectBox ────────────────────────────────────────────────────────────────
+-keep class io.objectbox.** { *; }
+-dontwarn io.objectbox.**
+# Keep all entity classes and their fields (ObjectBox uses reflection for cursor generation)
+-keep @io.objectbox.annotation.Entity class * { *; }
+-keepclassmembers @io.objectbox.annotation.Entity class * { *; }
+
+# ── Kotlin serialization ─────────────────────────────────────────────────────
+-keep @kotlinx.serialization.Serializable class * { *; }
+-keepclassmembers @kotlinx.serialization.Serializable class * { *; }
+-keepattributes *Annotation*, InnerClasses
+-dontnote kotlinx.serialization.AnnotationsKt
+-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
+-keepclasseswithmembers class kotlinx.serialization.** { *; }
+
+# ── Kotlin ───────────────────────────────────────────────────────────────────
+-keep class kotlin.Metadata { *; }
+-keepattributes Signature, RuntimeVisibleAnnotations, AnnotationDefault
+
+# ── Ktor ─────────────────────────────────────────────────────────────────────
+-keep class io.ktor.** { *; }
+-dontwarn io.ktor.**
+-keep class kotlinx.coroutines.** { *; }
+
+# ── Security crypto (EncryptedSharedPreferences) ─────────────────────────────
+-keep class androidx.security.crypto.** { *; }
+-dontwarn androidx.security.crypto.**
+
+# ── Gson ─────────────────────────────────────────────────────────────────────
+-keep class com.google.gson.** { *; }
+-keepattributes *Annotation*
+-keep class * extends com.google.gson.TypeAdapter
+-keep class * implements com.google.gson.TypeAdapterFactory
+-keep class * implements com.google.gson.JsonSerializer
+-keep class * implements com.google.gson.JsonDeserializer
+
+# ── ML Kit Barcode / CameraX ─────────────────────────────────────────────────
+-keep class com.google.mlkit.** { *; }
+-dontwarn com.google.mlkit.**
+-keep class androidx.camera.** { *; }
+
+# ── Glance widgets ───────────────────────────────────────────────────────────
+-keep class androidx.glance.** { *; }
+-dontwarn androidx.glance.**
+
+# ── Compose ──────────────────────────────────────────────────────────────────
+-keep class androidx.compose.** { *; }
+-dontwarn androidx.compose.**
+-keepclassmembers class * extends androidx.lifecycle.ViewModel { (...); }
+
+# ── Lottie ───────────────────────────────────────────────────────────────────
+-keep class com.airbnb.lottie.** { *; }
+-dontwarn com.airbnb.lottie.**
+
+# ── Coil ─────────────────────────────────────────────────────────────────────
+-keep class coil3.** { *; }
+-dontwarn coil3.**
+
+# ── Vico charts ──────────────────────────────────────────────────────────────
+-keep class com.patrykandpatrick.vico.** { *; }
+-dontwarn com.patrykandpatrick.vico.**
+
+# ── Timber ───────────────────────────────────────────────────────────────────
+-keep class timber.log.** { *; }
+
+# ── Health Connect ───────────────────────────────────────────────────────────
+-keep class androidx.health.connect.** { *; }
+-dontwarn androidx.health.connect.**
+
+# ── Haze blur ────────────────────────────────────────────────────────────────
+-keep class dev.chrisbanes.haze.** { *; }
+-dontwarn dev.chrisbanes.haze.**
+
+# ── Gemini Nano AICore ───────────────────────────────────────────────────────
+-keep class com.google.ai.edge.** { *; }
+-dontwarn com.google.ai.edge.**
+
+# ── WorkManager ──────────────────────────────────────────────────────────────
+-keep class * extends androidx.work.Worker { *; }
+-keep class * extends androidx.work.CoroutineWorker { *; }
+-keep class * extends androidx.work.ListenableWorker { *; }
+-keepclassmembers class * extends androidx.work.ListenableWorker {
+ public (android.content.Context, androidx.work.WorkerParameters);
+}
+
+# ── QR codec ─────────────────────────────────────────────────────────────────
+-keep class io.github.g0dkar.** { *; }
+-dontwarn io.github.g0dkar.**
+
+# ── App data models (backup/restore JSON mapping via Gson/kotlinx) ────────────
+-keep class com.ironlog.app.data.model.** { *; }
+-keep class com.ironlog.app.ui.model.** { *; }
+-keep class com.ironlog.app.domain.gamification.** { *; }
+-keep class com.ironlog.app.domain.badges.** { *; }
+
+# ── Keep enums ───────────────────────────────────────────────────────────────
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# ── Suppress common harmless warnings ────────────────────────────────────────
+-dontwarn org.bouncycastle.**
+-dontwarn org.conscrypt.**
+-dontwarn org.openjsse.**
+-dontwarn sun.misc.**
+-dontwarn javax.annotation.**
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..2cc0462
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/assets/exerciseLibrary.json b/app/src/main/assets/exerciseLibrary.json
new file mode 100644
index 0000000..73b9ee8
--- /dev/null
+++ b/app/src/main/assets/exerciseLibrary.json
@@ -0,0 +1,61530 @@
+{
+ "meta": {
+ "schemaVersion": "2.0.0",
+ "generatedAt": "2026-04-25T02:51:20.759472+00:00",
+ "totalExercises": 1731,
+ "replacesSchemaVersion": "1.0.0",
+ "sourceLibraries": [
+ "ironlog-original",
+ "ironlog-additions",
+ "codex-source-verified"
+ ],
+ "appEquipmentValues": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight",
+ "Band",
+ "Kettlebell",
+ "Conditioning",
+ "Other"
+ ],
+ "detailedEquipmentValues": [
+ "Bodyweight",
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Smith Machine",
+ "Kettlebell",
+ "EZ Bar",
+ "Resistance Band",
+ "Medicine Ball",
+ "Stability Ball",
+ "Suspension/TRX",
+ "Rings",
+ "Pull-Up Bar",
+ "Dip Bars",
+ "Bench",
+ "Box/Platform",
+ "Landmine",
+ "Plate",
+ "Sled",
+ "Battle Rope",
+ "Rope",
+ "Sandbag",
+ "Trap Bar",
+ "Foam Roller",
+ "Cardio Machine",
+ "Other"
+ ],
+ "trackingTypeValues": [
+ "weight_reps",
+ "duration",
+ "duration_distance"
+ ],
+ "categoryValues": [
+ "strength",
+ "cardio",
+ "mobility",
+ "bodyweight",
+ "olympic"
+ ],
+ "movementPatternValues": [
+ "push",
+ "pull",
+ "hinge",
+ "squat",
+ "carry",
+ "rotation",
+ "isometric",
+ "locomotion"
+ ],
+ "difficultyValues": [
+ "beginner",
+ "intermediate",
+ "advanced"
+ ],
+ "muscleValues": [
+ "Abdominals",
+ "Abductors",
+ "Adductors",
+ "Biceps",
+ "Calves",
+ "Chest",
+ "Conditioning",
+ "Core",
+ "Forearms",
+ "Full Body",
+ "Glutes",
+ "Hamstrings",
+ "Lats",
+ "Lower back",
+ "Middle back",
+ "Mobility",
+ "Neck",
+ "Obliques",
+ "Quadriceps",
+ "Shoulders",
+ "Traps",
+ "Triceps"
+ ]
+ },
+ "exercises": [
+ {
+ "id": "34_situp",
+ "name": "3/4 Sit-Up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ab_crunch_machine",
+ "name": "Ab Crunch Machine",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "advanced_kettlebell_windmill",
+ "name": "Advanced Kettlebell Windmill",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_influencer_common"
+ ]
+ },
+ {
+ "id": "alternate_heel_touchers",
+ "name": "Alternate Heel Touchers",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_ab_rollout",
+ "name": "Barbell Ab Rollout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_ab_rollout__on_knees",
+ "name": "Barbell Ab Rollout - on Knees",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Ab Rollout - On Knees"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_rollout_from_bench",
+ "name": "Barbell Rollout From Bench",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Rollout from Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_side_bend",
+ "name": "Barbell Side Bend",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_press",
+ "name": "Bent Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bentknee_hip_raise",
+ "name": "Bent-Knee Hip Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bosu_ball_cable_crunch_with_side_bends",
+ "name": "Bosu Ball Cable Crunch With Side Bends",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bottoms_up",
+ "name": "Bottoms up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bottoms Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "buttups",
+ "name": "Butt-Ups",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_crunch",
+ "name": "Cable Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_judo_flip",
+ "name": "Cable Judo Flip",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_reverse_crunch",
+ "name": "Cable Reverse Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_russian_twists",
+ "name": "Cable Russian Twists",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_seated_crunch",
+ "name": "Cable Seated Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cocoons",
+ "name": "Cocoons",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crossbody_crunch",
+ "name": "Cross-Body Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crunch__hands_overhead",
+ "name": "Crunch - Hands Overhead",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crunch__legs_on_exercise_ball",
+ "name": "Crunch - Legs on Exercise Ball",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Crunch - Legs On Exercise Ball"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crunches",
+ "name": "Crunches",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dead_bug",
+ "name": "Dead Bug",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_crunch",
+ "name": "Decline Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_oblique_crunch",
+ "name": "Decline Oblique Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_reverse_crunch",
+ "name": "Decline Reverse Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_windmill",
+ "name": "Double Kettlebell Windmill",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_influencer_common"
+ ]
+ },
+ {
+ "id": "dumbbell_side_bend",
+ "name": "Dumbbell Side Bend",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elbow_to_knee",
+ "name": "Elbow to Knee",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "exercise_ball_crunch",
+ "name": "Exercise Ball Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "exercise_ball_pullin",
+ "name": "Exercise Ball Pull-In",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flat_bench_leg_pullin",
+ "name": "Flat Bench Leg Pull-In",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flat_bench_lying_leg_raise",
+ "name": "Flat Bench Lying Leg Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frog_situps",
+ "name": "Frog Sit-Ups",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "gorilla_chincrunch",
+ "name": "Gorilla Chin/Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Gorilla Crunch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hanging_leg_raise",
+ "name": "Hanging Leg Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hanging_pike",
+ "name": "Hanging Pike",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jackknife_situp",
+ "name": "Jackknife Sit-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Jackknife Sit-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "janda_situp",
+ "name": "Janda Sit-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Janda Sit-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_figure_8",
+ "name": "Kettlebell Figure 8",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_pass_between_the_legs",
+ "name": "Kettlebell Pass Between the Legs",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Kettlebell Pass Between The Legs"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_windmill",
+ "name": "Kettlebell Windmill",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_influencer_common"
+ ]
+ },
+ {
+ "id": "kneehip_raise_on_parallel_bars",
+ "name": "Knee/Hip Raise on Parallel Bars",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Dip Bars",
+ "apparatus": [
+ "Dip Bars"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Knee/Hip Raise On Parallel Bars"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "kneeling_cable_crunch_with_alternating_oblique_twists",
+ "name": "Kneeling Cable Crunch With Alternating Oblique Twists",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leg_pullin",
+ "name": "Leg Pull-In",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lower_back_curl",
+ "name": "Lower Back Curl",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "medicine_ball_full_twist",
+ "name": "Medicine Ball Full Twist",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "oblique_crunches",
+ "name": "Oblique Crunches",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "oblique_crunches__on_the_floor",
+ "name": "Oblique Crunches - on the Floor",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Oblique Crunches - On The Floor"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_highpulley_cable_side_bends",
+ "name": "One-Arm High-Pulley Cable Side Bends",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_medicine_ball_slam",
+ "name": "One-Arm Medicine Ball Slam",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "otisup",
+ "name": "Otis-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Otis-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_stretch",
+ "name": "Overhead Stretch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pallof_press",
+ "name": "Pallof Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pallof_press_with_rotation",
+ "name": "Pallof Press With Rotation",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank",
+ "name": "Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_twist",
+ "name": "Plate Twist",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "press_situp",
+ "name": "Press Sit-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Press Sit-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_crunch",
+ "name": "Reverse Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rope_crunch",
+ "name": "Rope Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "russian_twist",
+ "name": "Russian Twist",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "scissor_kick",
+ "name": "Scissor Kick",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_barbell_twist",
+ "name": "Seated Barbell Twist",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_flat_bench_leg_pullin",
+ "name": "Seated Flat Bench Leg Pull-In",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_leg_tucks",
+ "name": "Seated Leg Tucks",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_overhead_stretch",
+ "name": "Seated Overhead Stretch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_bridge",
+ "name": "Side Bridge",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_jackknife",
+ "name": "Side Jackknife",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "situp",
+ "name": "Sit-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Sit-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sledgehammer_swings",
+ "name": "Sledgehammer Swings",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_hip_raise",
+ "name": "Smith Machine Hip Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spell_caster",
+ "name": "Spell Caster",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spider_crawl",
+ "name": "Spider Crawl",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_lift",
+ "name": "Standing Cable Lift",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_wood_chop",
+ "name": "Standing Cable Wood Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_lateral_stretch",
+ "name": "Standing Lateral Stretch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_rope_crunch",
+ "name": "Standing Rope Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stomach_vacuum",
+ "name": "Stomach Vacuum",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "supine_onearm_overhead_throw",
+ "name": "Supine One-Arm Overhead Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "supine_twoarm_overhead_throw",
+ "name": "Supine Two-Arm Overhead Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "suspended_fallout",
+ "name": "Suspended Fallout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "suspended_reverse_crunch",
+ "name": "Suspended Reverse Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "toe_touchers",
+ "name": "Toe Touchers",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "torso_rotation",
+ "name": "Torso Rotation",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_crunch",
+ "name": "Tuck Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_ball_side_bend",
+ "name": "Weighted Ball Side Bend",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_crunches",
+ "name": "Weighted Crunches",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_situps__with_bands",
+ "name": "Weighted Sit-Ups - With Bands",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wind_sprints",
+ "name": "Wind Sprints",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_circles_prone",
+ "name": "Hip Circles (prone)",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "it_band_and_glute_stretch",
+ "name": "IT Band and Glute Stretch",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "iliotibial_tractsmr",
+ "name": "Iliotibial Tract-SMR",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_crossover",
+ "name": "Lying Crossover",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "monster_walk",
+ "name": "Monster Walk",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_hip_circles",
+ "name": "Standing Hip Circles",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "thigh_abductor",
+ "name": "Thigh Abductor",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "windmills",
+ "name": "Windmills",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "adductor",
+ "name": "Adductor",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "adductorgroin",
+ "name": "Adductor/Groin",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Groin Stretch",
+ "Adductor Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "band_hip_adductions",
+ "name": "Band Hip Adductions",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "carioca_quick_step",
+ "name": "Carioca Quick Step",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "groin_and_back_stretch",
+ "name": "Groin and Back Stretch",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "groiners",
+ "name": "Groiners",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_bound",
+ "name": "Lateral Bound",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_box_jump",
+ "name": "Lateral Box Jump",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_cone_hops",
+ "name": "Lateral Cone Hops",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_bent_leg_groin",
+ "name": "Lying Bent Leg Groin",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_leg_raises",
+ "name": "Side Leg Raises",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_lying_groin_stretch",
+ "name": "Side Lying Groin Stretch",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "thigh_adductor",
+ "name": "Thigh Adductor",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternate_hammer_curl",
+ "name": "Alternate Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternate_incline_dumbbell_curl",
+ "name": "Alternate Incline Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_curl",
+ "name": "Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_curls_lying_against_an_incline",
+ "name": "Barbell Curls Lying Against An Incline",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "brachialissmr",
+ "name": "Brachialis-SMR",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_hammer_curls__rope_attachment",
+ "name": "Cable Hammer Curls - Rope Attachment",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_preacher_curl",
+ "name": "Cable Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_ez_bar_curl",
+ "name": "Close-Grip EZ Bar Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_ezbar_curl_with_band",
+ "name": "Close-Grip EZ-Bar Curl With Band",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Close-Grip EZ-Bar Curl with Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_standing_barbell_curl",
+ "name": "Close-Grip Standing Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cross_body_hammer_curl",
+ "name": "Cross Body Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "drag_curl",
+ "name": "Drag Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_alternate_bicep_curl",
+ "name": "Dumbbell Alternate Bicep Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_bicep_curl",
+ "name": "Dumbbell Bicep Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_prone_incline_curl",
+ "name": "Dumbbell Prone Incline Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ezbar_curl",
+ "name": "EZ-Bar Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flexor_incline_dumbbell_curls",
+ "name": "Flexor Incline Dumbbell Curls",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_curls",
+ "name": "Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Hammer Curls"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_cable_curls",
+ "name": "High Cable Curls",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_curl",
+ "name": "Incline Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_inner_biceps_curl",
+ "name": "Incline Inner Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_cable_curl",
+ "name": "Lying Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_closegrip_bar_curl_on_high_pulley",
+ "name": "Lying Close-Grip Bar Curl on High Pulley",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Lying Close-Grip Bar Curl On High Pulley"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_high_bench_barbell_curl",
+ "name": "Lying High Bench Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_supine_dumbbell_curl",
+ "name": "Lying Supine Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_bicep_curl",
+ "name": "Machine Bicep Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_dumbbell_preacher_curl",
+ "name": "One Arm Dumbbell Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_cable_curl",
+ "name": "Overhead Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "preacher_curl",
+ "name": "Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "preacher_hammer_dumbbell_curl",
+ "name": "Preacher Hammer Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_barbell_curl",
+ "name": "Reverse Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_barbell_preacher_curls",
+ "name": "Reverse Barbell Preacher Curls",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_cable_curl",
+ "name": "Reverse Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_plate_curls",
+ "name": "Reverse Plate Curls",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_biceps",
+ "name": "Seated Biceps",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_closegrip_concentration_barbell_curl",
+ "name": "Seated Close-Grip Concentration Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_curl",
+ "name": "Seated Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_inner_biceps_curl",
+ "name": "Seated Dumbbell Inner Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spider_curl",
+ "name": "Spider Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_biceps_cable_curl",
+ "name": "Standing Biceps Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_biceps_stretch",
+ "name": "Standing Biceps Stretch",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_concentration_curl",
+ "name": "Standing Concentration Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_reverse_curl",
+ "name": "Standing Dumbbell Reverse Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_innerbiceps_curl",
+ "name": "Standing Inner-Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_onearm_cable_curl",
+ "name": "Standing One-Arm Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_onearm_dumbbell_curl_over_incline_bench",
+ "name": "Standing One-Arm Dumbbell Curl Over Incline Bench",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "twoarm_dumbbell_preacher_curl",
+ "name": "Two-Arm Dumbbell Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_standing_barbell_curl",
+ "name": "Wide-Grip Standing Barbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "zottman_curl",
+ "name": "Zottman Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "zottman_preacher_curl",
+ "name": "Zottman Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ankle_circles",
+ "name": "Ankle Circles",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "anterior_tibialissmr",
+ "name": "Anterior Tibialis-SMR",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "balance_board",
+ "name": "Balance Board",
+ "primaryMuscle": "Mobility",
+ "primaryMuscles": [
+ "Mobility"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Core"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Balance Board"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_seated_calf_raise",
+ "name": "Barbell Seated Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_press",
+ "name": "Calf Press",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_press_on_the_leg_press_machine",
+ "name": "Calf Press on the Leg Press Machine",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [
+ "Calf Press On The Leg Press Machine"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_raise_on_a_dumbbell",
+ "name": "Calf Raise on A Dumbbell",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Calf Raise On A Dumbbell"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_raises__with_bands",
+ "name": "Calf Raises - With Bands",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_stretch_elbows_against_wall",
+ "name": "Calf Stretch Elbows Against Wall",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_stretch_hands_against_wall",
+ "name": "Calf Stretch Hands Against Wall",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calvessmr",
+ "name": "Calves-SMR",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "donkey_calf_raises",
+ "name": "Donkey Calf Raises",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_seated_oneleg_calf_raise",
+ "name": "Dumbbell Seated One-Leg Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "footsmr",
+ "name": "Foot-SMR",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "knee_circles",
+ "name": "Knee Circles",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "peroneals_stretch",
+ "name": "Peroneals Stretch",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "peronealssmr",
+ "name": "Peroneals-SMR",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "posterior_tibialis_stretch",
+ "name": "Posterior Tibialis Stretch",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rocking_standing_calf_raise",
+ "name": "Rocking Standing Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_calf_raise",
+ "name": "Seated Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_calf_stretch",
+ "name": "Seated Calf Stretch",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_calf_raise",
+ "name": "Smith Machine Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_reverse_calf_raises",
+ "name": "Smith Machine Reverse Calf Raises",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_barbell_calf_raise",
+ "name": "Standing Barbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_calf_raises",
+ "name": "Standing Calf Raises",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_calf_raise",
+ "name": "Standing Dumbbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_gastrocnemius_calf_stretch",
+ "name": "Standing Gastrocnemius Calf Stretch",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_soleus_and_achilles_stretch",
+ "name": "Standing Soleus and Achilles Stretch",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Standing Soleus And Achilles Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_floor_press",
+ "name": "Alternating Floor Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "around_the_worlds",
+ "name": "Around the Worlds",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Around The Worlds"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_bench_press__medium_grip",
+ "name": "Barbell Bench Press - Medium Grip",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_guillotine_bench_press",
+ "name": "Barbell Guillotine Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_incline_bench_press__medium_grip",
+ "name": "Barbell Incline Bench Press - Medium Grip",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "behind_head_chest_stretch",
+ "name": "Behind Head Chest Stretch",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_press__with_bands",
+ "name": "Bench Press - With Bands",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bentarm_dumbbell_pullover",
+ "name": "Bent-Arm Dumbbell Pullover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_flyes",
+ "name": "Bodyweight Flyes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "butterfly",
+ "name": "Butterfly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_chest_press",
+ "name": "Cable Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_crossover",
+ "name": "Cable Crossover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_iron_cross",
+ "name": "Cable Iron Cross",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chain_press",
+ "name": "Chain Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_and_front_of_shoulder_stretch",
+ "name": "Chest and Front of Shoulder Stretch",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Chest And Front Of Shoulder Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_push_multiple_response",
+ "name": "Chest Push (multiple Response)",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Chest Push (multiple response)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_push_single_response",
+ "name": "Chest Push (single Response)",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Chest Push (single response)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_push_from_3_point_stance",
+ "name": "Chest Push From 3 Point Stance",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Chest Push from 3 point stance"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_push_with_run_release",
+ "name": "Chest Push With Run Release",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Chest Push with Run Release"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_stretch_on_stability_ball",
+ "name": "Chest Stretch on Stability Ball",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clock_pushup",
+ "name": "Clock Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Clock Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cross_over__with_bands",
+ "name": "Cross Over - With Bands",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_barbell_bench_press",
+ "name": "Decline Barbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_dumbbell_bench_press",
+ "name": "Decline Dumbbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_dumbbell_flyes",
+ "name": "Decline Dumbbell Flyes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_pushup",
+ "name": "Decline Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Decline Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_smith_press",
+ "name": "Decline Smith Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dips__chest_version",
+ "name": "Dips - Chest Version",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Dip Bars",
+ "apparatus": [
+ "Dip Bars"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "drop_push",
+ "name": "Drop Push",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_bench_press",
+ "name": "Dumbbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_bench_press_with_neutral_grip",
+ "name": "Dumbbell Bench Press With Neutral Grip",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Dumbbell Bench Press with Neutral Grip"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_flyes",
+ "name": "Dumbbell Flyes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dynamic_chest_stretch",
+ "name": "Dynamic Chest Stretch",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elbows_back",
+ "name": "Elbows Back",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "extended_range_onearm_kettlebell_floor_press",
+ "name": "Extended Range One-Arm Kettlebell Floor Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flat_bench_cable_flyes",
+ "name": "Flat Bench Cable Flyes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "forward_drag_with_press",
+ "name": "Forward Drag With Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Forward Drag with Press"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_raise_and_pullover",
+ "name": "Front Raise and Pullover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Front Raise And Pullover"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_grip_incline_db_bench_press",
+ "name": "Hammer Grip Incline DB Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "heavy_bag_thrust",
+ "name": "Heavy Bag Thrust",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Triceps",
+ "Core"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Heavy Bag"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_cable_chest_press",
+ "name": "Incline Cable Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_cable_flye",
+ "name": "Incline Cable Flye",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_bench_with_palms_facing_in",
+ "name": "Incline Dumbbell Bench With Palms Facing In",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_flyes",
+ "name": "Incline Dumbbell Flyes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_flyes__with_a_twist",
+ "name": "Incline Dumbbell Flyes - With A Twist",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_press",
+ "name": "Incline Dumbbell Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup",
+ "name": "Incline Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup_depth_jump",
+ "name": "Incline Push-up Depth Jump",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [
+ "Incline Push-Up Depth Jump"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup_medium",
+ "name": "Incline Push-up Medium",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Push-Up Medium"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup_reverse_grip",
+ "name": "Incline Push-up Reverse Grip",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Push-Up Reverse Grip"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup_wide",
+ "name": "Incline Push-up Wide",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Push-Up Wide"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "isometric_chest_squeezes",
+ "name": "Isometric Chest Squeezes",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "isometric_wipers",
+ "name": "Isometric Wipers",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "legover_floor_press",
+ "name": "Leg-Over Floor Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_chest_press",
+ "name": "Leverage Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_decline_chest_press",
+ "name": "Leverage Decline Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_incline_chest_press",
+ "name": "Leverage Incline Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_cable_crossover",
+ "name": "Low Cable Crossover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_bench_press",
+ "name": "Machine Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "medicine_ball_chest_pass",
+ "name": "Medicine Ball Chest Pass",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "neck_press",
+ "name": "Neck Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_dumbbell_bench_press",
+ "name": "One Arm Dumbbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_flat_bench_dumbbell_flye",
+ "name": "One-Arm Flat Bench Dumbbell Flye",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_floor_press",
+ "name": "One-Arm Kettlebell Floor Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plyo_kettlebell_pushups",
+ "name": "Plyo Kettlebell Push-Ups",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [
+ "Plyo Kettlebell Pushups",
+ "Press-Up",
+ "Pushup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "plyo_pushup",
+ "name": "Plyo Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_up_to_side_plank",
+ "name": "Push-up to Side Plank",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Push Up to Side Plank"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pushup_wide",
+ "name": "Push-up Wide",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Push-Up Wide"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pushups_with_feet_elevated",
+ "name": "Push-Ups With Feet Elevated",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Press-Up",
+ "Pushup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "pushups_with_feet_on_an_exercise_ball",
+ "name": "Push-Ups With Feet on An Exercise Ball",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Press-Up",
+ "Push-Ups With Feet On An Exercise Ball",
+ "Pushup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "pushups",
+ "name": "Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pushups"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "pushups_close_and_wide_hand_positions",
+ "name": "Push-Ups (close and Wide Hand Positions)",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Press-Up",
+ "Pushup",
+ "Pushups (Close and Wide Hand Positions)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "singlearm_cable_crossover",
+ "name": "Single-Arm Cable Crossover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singlearm_pushup",
+ "name": "Single-Arm Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Single-Arm Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_bench_press_smith_machine",
+ "name": "Bench Press - Smith Machine",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_decline_press",
+ "name": "Smith Machine Decline Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_incline_bench_press_smith_machine",
+ "name": "Incline Bench Press - Smith Machine",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Smith Machine Incline Bench Press"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_chest_press",
+ "name": "Standing Cable Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straightarm_dumbbell_pullover",
+ "name": "Straight-Arm Dumbbell Pullover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "suspended_pushup",
+ "name": "Suspended Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Suspended Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "svend_press",
+ "name": "Svend Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_barbell_bench_press",
+ "name": "Wide-Grip Barbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_decline_barbell_bench_press",
+ "name": "Wide-Grip Decline Barbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_decline_barbell_pullover",
+ "name": "Wide-Grip Decline Barbell Pullover",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bottomsup_clean_from_the_hang_position",
+ "name": "Bottoms-up Clean From the Hang Position",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bottoms-Up Clean From The Hang Position"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_wrist_curl",
+ "name": "Cable Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lying_pronation",
+ "name": "Dumbbell Lying Pronation",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lying_supination",
+ "name": "Dumbbell Lying Supination",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "farmers_walk",
+ "name": "Farmer's Walk",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Traps",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "finger_curls",
+ "name": "Finger Curls",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_forearm_stretch",
+ "name": "Kneeling Forearm Stretch",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "palmsdown_dumbbell_wrist_curl_over_a_bench",
+ "name": "Palms-down Dumbbell Wrist Curl Over A Bench",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Palms-Down Dumbbell Wrist Curl Over A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "palmsdown_wrist_curl_over_a_bench",
+ "name": "Palms-down Wrist Curl Over A Bench",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Palms-Down Wrist Curl Over A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "palmsup_barbell_wrist_curl_over_a_bench",
+ "name": "Palms-up Barbell Wrist Curl Over A Bench",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Palms-Up Barbell Wrist Curl Over A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "palmsup_dumbbell_wrist_curl_over_a_bench",
+ "name": "Palms-up Dumbbell Wrist Curl Over A Bench",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Palms-Up Dumbbell Wrist Curl Over A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_pinch",
+ "name": "Plate Pinch",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rickshaw_carry",
+ "name": "Rickshaw Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Traps",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_palmsdown_wrist_curl",
+ "name": "Seated Dumbbell Palms-down Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated Dumbbell Palms-Down Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_palmsup_wrist_curl",
+ "name": "Seated Dumbbell Palms-up Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated Dumbbell Palms-Up Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_onearm_dumbbell_palmsdown_wrist_curl",
+ "name": "Seated One-Arm Dumbbell Palms-down Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated One-Arm Dumbbell Palms-Down Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_onearm_dumbbell_palmsup_wrist_curl",
+ "name": "Seated One-Arm Dumbbell Palms-up Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated One-Arm Dumbbell Palms-Up Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_palmup_barbell_wrist_curl",
+ "name": "Seated Palm-up Barbell Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated Palm-Up Barbell Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_palmsdown_barbell_wrist_curl",
+ "name": "Seated Palms-down Barbell Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated Palms-Down Barbell Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_twoarm_palmsup_lowpulley_wrist_curl",
+ "name": "Seated Two-Arm Palms-up Low-Pulley Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated Two-Arm Palms-Up Low-Pulley Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_olympic_plate_hand_squeeze",
+ "name": "Standing Olympic Plate Hand Squeeze",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_palmsup_barbell_behind_the_back_wrist_curl",
+ "name": "Standing Palms-up Barbell Behind the Back Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Standing Palms-Up Barbell Behind The Back Wrist Curl"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wrist_circles",
+ "name": "Wrist Circles",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wrist_roller",
+ "name": "Wrist Roller",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Wrist Roller"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wrist_rotations_with_straight_bar",
+ "name": "Wrist Rotations With Straight Bar",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Wrist Rotations with Straight Bar"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ankle_on_the_knee",
+ "name": "Ankle on the Knee",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Ankle On The Knee"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_glute_bridge",
+ "name": "Barbell Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_hip_thrust",
+ "name": "Barbell Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "butt_lift_bridge",
+ "name": "Butt Lift (bridge)",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Butt Lift (Bridge)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "downward_facing_balance",
+ "name": "Downward Facing Balance",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flutter_kicks",
+ "name": "Flutter Kicks",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "glute_kickback",
+ "name": "Glute Kickback",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_extension_with_bands",
+ "name": "Hip Extension With Bands",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Hip Extension with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_lift_with_band",
+ "name": "Hip Lift With Band",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Hip Lift with Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "knee_across_the_body",
+ "name": "Knee Across the Body",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Knee Across The Body"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_jump_squat",
+ "name": "Kneeling Jump Squat",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_squat",
+ "name": "Kneeling Squat",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leg_lift",
+ "name": "Leg Lift",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_glute",
+ "name": "Lying Glute",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_knee_to_chest",
+ "name": "One Knee to Chest",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "One Knee To Chest"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onelegged_cable_kickback",
+ "name": "One-Legged Cable Kickback",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "physioball_hip_bridge",
+ "name": "Physioball Hip Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "piriformissmr",
+ "name": "Piriformis-SMR",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pull_through",
+ "name": "Pull Through",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_glute",
+ "name": "Seated Glute",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_glute_bridge",
+ "name": "Single Leg Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stepup_with_knee_raise",
+ "name": "Step-up With Knee Raise",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Step-up with Knee Raise"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "9090_hamstring",
+ "name": "90/90 Hamstring",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "90/90 Hamstring Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "alternating_hang_clean",
+ "name": "Alternating Hang Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ball_leg_curl",
+ "name": "Ball Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_good_morning",
+ "name": "Band Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_good_morning_pull_through",
+ "name": "Band Good Morning (pull Through)",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [
+ "Band Good Morning (Pull Through)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_jump_multiple_response",
+ "name": "Box Jump (multiple Response)",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Box Jump (Multiple Response)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_skip",
+ "name": "Box Skip",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chair_leg_extended_stretch",
+ "name": "Chair Leg Extended Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean",
+ "name": "Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_deadlift",
+ "name": "Clean Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_alternating_hang_clean",
+ "name": "Double Kettlebell Alternating Hang Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_clean",
+ "name": "Dumbbell Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "floor_gluteham_raise",
+ "name": "Floor Glute-Ham Raise",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_box_jump",
+ "name": "Front Box Jump",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_leg_raises",
+ "name": "Front Leg Raises",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "glute_ham_raise",
+ "name": "Glute Ham Raise",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Glute-Ham Developer"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "good_morning",
+ "name": "Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "good_morning_off_pins",
+ "name": "Good Morning Off Pins",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Good Morning off Pins"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hamstring_stretch",
+ "name": "Hamstring Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hamstringsmr",
+ "name": "Hamstring-SMR",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hang_snatch",
+ "name": "Hang Snatch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hang_snatch__below_knees",
+ "name": "Hang Snatch - Below Knees",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hanging_bar_good_morning",
+ "name": "Hanging Bar Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hurdle_hops",
+ "name": "Hurdle Hops",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "inchworm",
+ "name": "Inchworm",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "intermediate_groin_stretch",
+ "name": "Intermediate Groin Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_dead_clean",
+ "name": "Kettlebell Dead Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_hang_clean",
+ "name": "Kettlebell Hang Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_onelegged_deadlift",
+ "name": "Kettlebell One-Legged Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "knee_tuck_jump",
+ "name": "Knee Tuck Jump",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "legup_hamstring_stretch",
+ "name": "Leg-up Hamstring Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [
+ "Leg-Up Hamstring Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "linear_3part_start_technique",
+ "name": "Linear 3-Part Start Technique",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "linear_acceleration_wall_drill",
+ "name": "Linear Acceleration Wall Drill",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lunge_pass_through",
+ "name": "Lunge Pass Through",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_hamstring",
+ "name": "Lying Hamstring",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_leg_curls",
+ "name": "Lying Leg Curls",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "moving_claw_series",
+ "name": "Moving Claw Series",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "muscle_snatch",
+ "name": "Muscle Snatch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "natural_glute_ham_raise",
+ "name": "Natural Glute Ham Raise",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_clean",
+ "name": "One-Arm Kettlebell Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_swings",
+ "name": "One-Arm Kettlebell Swings",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_open_palm_kettlebell_clean",
+ "name": "One-Arm Open Palm Kettlebell Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "open_palm_kettlebell_clean",
+ "name": "Open Palm Kettlebell Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "platform_hamstring_slides",
+ "name": "Platform Hamstring Slides",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_clean",
+ "name": "Power Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_clean_from_blocks",
+ "name": "Power Clean From Blocks",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "Power Clean from Blocks"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_snatch",
+ "name": "Power Snatch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_stairs",
+ "name": "Power Stairs",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prone_manual_hamstring",
+ "name": "Prone Manual Hamstring",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prowler_sprint",
+ "name": "Prowler Sprint",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_band_sumo_deadlift",
+ "name": "Reverse Band Sumo Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_hyperextension",
+ "name": "Reverse Hyperextension",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "romanian_deadlift",
+ "name": "Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "romanian_deadlift_from_deficit",
+ "name": "Romanian Deadlift From Deficit",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL",
+ "Romanian Deadlift from Deficit"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "runners_stretch",
+ "name": "Runner's Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_band_hamstring_curl",
+ "name": "Seated Band Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_floor_hamstring_stretch",
+ "name": "Seated Floor Hamstring Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_hamstring",
+ "name": "Seated Hamstring",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_hamstring_and_calf_stretch",
+ "name": "Seated Hamstring and Calf Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_leg_curl",
+ "name": "Seated Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_hang_power_clean",
+ "name": "Smith Machine Hang Power Clean",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_stifflegged_deadlift",
+ "name": "Smith Machine Stiff-Legged Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_deadlift",
+ "name": "Snatch Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_pull",
+ "name": "Snatch Pull",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_snatch",
+ "name": "Split Snatch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals",
+ "Quadriceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_squats",
+ "name": "Split Squats",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_hamstring_and_calf_stretch",
+ "name": "Standing Hamstring and Calf Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_leg_curl",
+ "name": "Standing Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_toe_touches",
+ "name": "Standing Toe Touches",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stifflegged_barbell_deadlift",
+ "name": "Stiff-Legged Barbell Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stifflegged_dumbbell_deadlift",
+ "name": "Stiff-Legged Dumbbell Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sumo_deadlift",
+ "name": "Sumo Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sumo_deadlift_with_bands",
+ "name": "Sumo Deadlift With Bands",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [
+ "Sumo Deadlift with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sumo_deadlift_with_chains",
+ "name": "Sumo Deadlift With Chains",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Sumo Deadlift with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "the_straddle",
+ "name": "the Straddle",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "The Straddle"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upper_backleg_grab",
+ "name": "Upper Back-Leg Grab",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "vertical_swing",
+ "name": "Vertical Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wide_stance_stiff_legs",
+ "name": "Wide Stance Stiff Legs",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "worlds_greatest_stretch",
+ "name": "World's Greatest Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_assisted_pullup",
+ "name": "Band Assisted Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Band Assisted Pull-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bentarm_barbell_pullover",
+ "name": "Bent-Arm Barbell Pullover",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_incline_pushdown",
+ "name": "Cable Incline Pushdown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "catch_and_overhead_throw",
+ "name": "Catch and Overhead Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "chair_lower_back_stretch",
+ "name": "Chair Lower Back Stretch",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chinup",
+ "name": "Chin-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Chin-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_front_lat_pulldown",
+ "name": "Close-Grip Front Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dynamic_back_stretch",
+ "name": "Dynamic Back Stretch",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elevated_cable_rows",
+ "name": "Elevated Cable Rows",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "full_rangeofmotion_lat_pulldown",
+ "name": "Full Range-of-Motion Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Full Range-Of-Motion Lat Pulldown"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "gironda_sternum_chins",
+ "name": "Gironda Sternum Chins",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kipping_muscle_up",
+ "name": "Kipping Muscle up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "Kipping Muscle Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_high_pulley_row",
+ "name": "Kneeling High Pulley Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_singlearm_high_pulley_row",
+ "name": "Kneeling Single-Arm High Pulley Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "latissimus_dorsismr",
+ "name": "Latissimus Dorsi-SMR",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_iso_row",
+ "name": "Leverage Iso Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "london_bridges",
+ "name": "London Bridges",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "muscle_up",
+ "name": "Muscle up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "Muscle Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_against_wall",
+ "name": "One Arm Against Wall",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_lat_pulldown",
+ "name": "One Arm Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_handed_hang",
+ "name": "One Handed Hang",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_lat",
+ "name": "Overhead Lat",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_slam",
+ "name": "Overhead Slam",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "pullups",
+ "name": "Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pullups"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "rocky_pullupspulldowns",
+ "name": "Rocky Pull-Ups/Pulldowns",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pullup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate",
+ "source_wger",
+ "source_strengthlog"
+ ]
+ },
+ {
+ "id": "rope_climb",
+ "name": "Rope Climb",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Rope",
+ "apparatus": [
+ "Rope"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rope_straightarm_pulldown",
+ "name": "Rope Straight-Arm Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shotgun_row",
+ "name": "Shotgun Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_to_side_chins",
+ "name": "Side to Side Chins",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Side To Side Chins"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sidelying_floor_stretch",
+ "name": "Side-Lying Floor Stretch",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straightarm_pulldown",
+ "name": "Straight-Arm Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "underhand_cable_pulldowns",
+ "name": "Underhand Cable Pulldowns",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "vbar_pulldown",
+ "name": "V-Bar Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "vbar_pullup",
+ "name": "V-Bar Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "V-Bar Pullup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_pull_ups",
+ "name": "Weighted Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Weighted Pull Ups"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_lat_pulldown",
+ "name": "Wide-Grip Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_pulldown_behind_the_neck",
+ "name": "Wide-Grip Pulldown Behind the Neck",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Wide-Grip Pulldown Behind The Neck"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "widegrip_rear_pullup",
+ "name": "Wide-Grip Rear Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Wide-Grip Rear Pull-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "atlas_stone_trainer",
+ "name": "Atlas Stone Trainer",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "atlas_stones",
+ "name": "Atlas Stones",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "axle_deadlift",
+ "name": "Axle Deadlift",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_deadlift",
+ "name": "Barbell Deadlift",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cat_stretch",
+ "name": "Cat Stretch",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "childs_pose",
+ "name": "Child's Pose",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crossover_reverse_lunge",
+ "name": "Crossover Reverse Lunge",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dancers_stretch",
+ "name": "Dancer's Stretch",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deadlift_with_bands",
+ "name": "Deadlift With Bands",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [
+ "Deadlift with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deadlift_with_chains",
+ "name": "Deadlift With Chains",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Deadlift with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deficit_deadlift",
+ "name": "Deficit Deadlift",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hug_a_ball",
+ "name": "Hug A Ball",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hug_knees_to_chest",
+ "name": "Hug Knees to Chest",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Hug Knees To Chest"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hyperextensions_back_extensions",
+ "name": "Hyperextensions (back Extensions)",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Back Extension Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Back Extension",
+ "Hyperextension",
+ "Hyperextensions (Back Extensions)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "hyperextensions_with_no_hyperextension_bench",
+ "name": "Hyperextensions With No Hyperextension Bench",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "keg_load",
+ "name": "Keg Load",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lower_backsmr",
+ "name": "Lower Back-SMR",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pelvic_tilt_into_bridge",
+ "name": "Pelvic Tilt Into Bridge",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pyramid",
+ "name": "Pyramid",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rack_pull_with_bands",
+ "name": "Rack Pull With Bands",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [
+ "Rack Pull with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_band_deadlift",
+ "name": "Reverse Band Deadlift",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_pelvic_tilt",
+ "name": "Standing Pelvic Tilt",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stiff_leg_barbell_good_morning",
+ "name": "Stiff Leg Barbell Good Morning",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "superman",
+ "name": "Superman",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_ball_hyperextension",
+ "name": "Weighted Ball Hyperextension",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_kettlebell_row",
+ "name": "Alternating Kettlebell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_renegade_row",
+ "name": "Alternating Renegade Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_barbell_row",
+ "name": "Bent Over Barbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_onearm_long_bar_row",
+ "name": "Bent Over One-Arm Long Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_twoarm_long_bar_row",
+ "name": "Bent Over Two-Arm Long Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_twodumbbell_row",
+ "name": "Bent Over Two-Dumbbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_twodumbbell_row_with_palms_in",
+ "name": "Bent Over Two-Dumbbell Row With Palms In",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_mid_row",
+ "name": "Bodyweight Mid Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_incline_row",
+ "name": "Dumbbell Incline Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_bench_pull",
+ "name": "Incline Bench Pull",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "inverted_row",
+ "name": "Inverted Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "inverted_row_with_straps",
+ "name": "Inverted Row With Straps",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Inverted Row with Straps"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_high_row",
+ "name": "Leverage High Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_cambered_barbell_row",
+ "name": "Lying Cambered Barbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_tbar_row",
+ "name": "Lying T-Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "middle_back_shrug",
+ "name": "Middle Back Shrug",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "middle_back_stretch",
+ "name": "Middle Back Stretch",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "mixed_grip_chin",
+ "name": "Mixed Grip Chin",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_chinup",
+ "name": "One Arm Chin-up",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "One Arm Chin-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_dumbbell_row",
+ "name": "One-Arm Dumbbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_row",
+ "name": "One-Arm Kettlebell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_long_bar_row",
+ "name": "One-Arm Long Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_grip_bentover_rows",
+ "name": "Reverse Grip Bent-Over Rows",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rhomboidssmr",
+ "name": "Rhomboids-SMR",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_cable_rows",
+ "name": "Seated Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Cable Row",
+ "Seated Cable Rows"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_onearm_cable_pulley_rows",
+ "name": "Seated One-Arm Cable Pulley Rows",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Seated One-arm Cable Pulley Rows"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_row",
+ "name": "Sled Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_bent_over_row",
+ "name": "Smith Machine Bent Over Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spinal_stretch",
+ "name": "Spinal Stretch",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straight_bar_bench_mid_rows",
+ "name": "Straight Bar Bench Mid Rows",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "suspended_row",
+ "name": "Suspended Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tbar_row_with_handle",
+ "name": "T-Bar Row With Handle",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "T-Bar Row with Handle"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "twoarm_kettlebell_row",
+ "name": "Two-Arm Kettlebell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upper_back_stretch",
+ "name": "Upper Back Stretch",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chin_to_chest_stretch",
+ "name": "Chin to Chest Stretch",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Chin To Chest Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "isometric_neck_exercise__front_and_back",
+ "name": "Isometric Neck Exercise - Front and Back",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Isometric Neck Exercise - Front And Back"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "isometric_neck_exercise__sides",
+ "name": "Isometric Neck Exercise - Sides",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_face_down_plate_neck_resistance",
+ "name": "Lying Face down Plate Neck Resistance",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Lying Face Down Plate Neck Resistance"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_face_up_plate_neck_resistance",
+ "name": "Lying Face up Plate Neck Resistance",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Lying Face Up Plate Neck Resistance"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "necksmr",
+ "name": "Neck-SMR",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_head_harness_neck_resistance",
+ "name": "Seated Head Harness Neck Resistance",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Neck Harness",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_neck_stretch",
+ "name": "Side Neck Stretch",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "all_fours_quad_stretch",
+ "name": "All Fours Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternate_leg_diagonal_bound",
+ "name": "Alternate Leg Diagonal Bound",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "backward_drag",
+ "name": "Backward Drag",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_full_squat",
+ "name": "Barbell Full Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hack_squat_barbell",
+ "name": "Hack Squat - Barbell",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Hack Squat"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_lunge",
+ "name": "Barbell Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_side_split_squat",
+ "name": "Barbell Side Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_squat",
+ "name": "Barbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_squat_to_a_bench",
+ "name": "Barbell Squat to A Bench",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Squat To A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_step_ups",
+ "name": "Barbell Step Ups",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_walking_lunge",
+ "name": "Barbell Walking Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bear_crawl_sled_drags",
+ "name": "Bear Crawl Sled Drags",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_jump",
+ "name": "Bench Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_sprint",
+ "name": "Bench Sprint",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bicycling",
+ "name": "Bicycling",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bicycling_stationary",
+ "name": "Bicycling, Stationary",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_squat",
+ "name": "Bodyweight Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_walking_lunge",
+ "name": "Bodyweight Walking Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_squat",
+ "name": "Box Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_squat_with_bands",
+ "name": "Box Squat With Bands",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [
+ "Box Squat with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_squat_with_chains",
+ "name": "Box Squat With Chains",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Box Squat with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_deadlifts",
+ "name": "Cable Deadlifts",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_hip_adduction",
+ "name": "Cable Hip Adduction",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "car_deadlift",
+ "name": "Car Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chair_squat",
+ "name": "Chair Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_pull",
+ "name": "Clean Pull",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_from_blocks",
+ "name": "Clean From Blocks",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Clean from Blocks"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "conans_wheel",
+ "name": "Conan's Wheel",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "depth_jump_leap",
+ "name": "Depth Jump Leap",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_leg_butt_kick",
+ "name": "Double Leg Butt Kick",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lunges",
+ "name": "Dumbbell Lunges",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_rear_lunge",
+ "name": "Dumbbell Rear Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_seated_box_jump",
+ "name": "Dumbbell Seated Box Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "duration",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_squat",
+ "name": "Dumbbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_squat_to_a_bench",
+ "name": "Dumbbell Squat to A Bench",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Dumbbell Squat To A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_step_ups",
+ "name": "Dumbbell Step-Up",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Dumbbell Step Ups",
+ "Dumbbell Step-up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elevated_back_lunge",
+ "name": "Elevated Back Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elliptical_trainer",
+ "name": "Elliptical Trainer",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "fast_skipping",
+ "name": "Fast Skipping",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frankenstein_squat",
+ "name": "Frankenstein Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "freehand_jump_squat",
+ "name": "Freehand Jump Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frog_hops",
+ "name": "Frog Hops",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_barbell_squat",
+ "name": "Front Barbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_barbell_squat_to_a_bench",
+ "name": "Front Barbell Squat to A Bench",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Front Barbell Squat To A Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_cone_hops_or_hurdle_hops",
+ "name": "Front Cone Hops (or Hurdle Hops)",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Front Cone Hops (or hurdle hops)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_squat_clean_grip",
+ "name": "Front Squat (clean Grip)",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Front Squat (Clean Grip)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_squats_with_two_kettlebells",
+ "name": "Front Squats With Two Kettlebells",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "goblet_squat",
+ "name": "Goblet Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hack_squat",
+ "name": "Hack Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Hack Squat Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hang_clean",
+ "name": "Hang Clean",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hang_clean__below_the_knees",
+ "name": "Hang Clean - Below the Knees",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "heaving_snatch_balance",
+ "name": "Heaving Snatch Balance",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_flexion_with_band",
+ "name": "Hip Flexion With Band",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Hip Flexion with Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "intermediate_hip_flexor_and_quad_stretch",
+ "name": "Intermediate Hip Flexor and Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "iron_crosses_stretch",
+ "name": "Iron Crosses (stretch)",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jefferson_squats",
+ "name": "Jefferson Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jerk_dip_squat",
+ "name": "Jerk Dip Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jogging_treadmill",
+ "name": "Jogging, Treadmill",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_pistol_squat",
+ "name": "Kettlebell Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_hip_flexor",
+ "name": "Kneeling Hip Flexor",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leg_extensions",
+ "name": "Leg Extension",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Leg Extensions"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leg_press",
+ "name": "Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_deadlift",
+ "name": "Leverage Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "linear_depth_jump",
+ "name": "Linear Depth Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "looking_at_ceiling",
+ "name": "Looking At Ceiling",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lunge_sprint",
+ "name": "Lunge Sprint",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_machine_squat",
+ "name": "Lying Machine Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_prone_quadriceps",
+ "name": "Lying Prone Quadriceps",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "narrow_stance_hack_squats",
+ "name": "Narrow Stance Hack Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Hack Squat Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "narrow_stance_leg_press",
+ "name": "Narrow Stance Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "narrow_stance_squats",
+ "name": "Narrow Stance Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "olympic_squat",
+ "name": "Olympic Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "on_your_side_quad_stretch",
+ "name": "on Your Side Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "On Your Side Quad Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onyourback_quad_stretch",
+ "name": "on-Your-Back Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "On-Your-Back Quad Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_half_locust",
+ "name": "One Half Locust",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_leg_barbell_squat",
+ "name": "One Leg Barbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_overhead_kettlebell_squats",
+ "name": "One-Arm Overhead Kettlebell Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_side_deadlift",
+ "name": "One-Arm Side Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_squat",
+ "name": "Overhead Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plie_dumbbell_squat",
+ "name": "Plie Dumbbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_jerk",
+ "name": "Power Jerk",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_snatch_from_blocks",
+ "name": "Power Snatch From Blocks",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "Power Snatch from Blocks"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "quad_stretch",
+ "name": "Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "quadricepssmr",
+ "name": "Quadriceps-SMR",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Foam Roller",
+ "apparatus": [
+ "Foam Roller"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "quick_leap",
+ "name": "Quick Leap",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rear_leg_raises",
+ "name": "Rear Leg Raises",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "recumbent_bike",
+ "name": "Recumbent Bike",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_band_box_squat",
+ "name": "Reverse Band Box Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_band_power_squat",
+ "name": "Reverse Band Power Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rickshaw_deadlift",
+ "name": "Rickshaw Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rocket_jump",
+ "name": "Rocket Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rope_jumping",
+ "name": "Rope Jumping",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Rope",
+ "apparatus": [
+ "Rope"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rowing_stationary",
+ "name": "Rowing, Stationary",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "running_treadmill",
+ "name": "Running, Treadmill",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_load",
+ "name": "Sandbag Load",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "scissors_jump",
+ "name": "Scissors Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_hopsprint",
+ "name": "Side Hop-Sprint",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_standing_long_jump",
+ "name": "Side Standing Long Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_to_side_box_shuffle",
+ "name": "Side to Side Box Shuffle",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_butt_kick",
+ "name": "Single Leg Butt Kick",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_pushoff",
+ "name": "Single Leg Push-Off",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Single Leg Push-off"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singlecone_sprint_drill",
+ "name": "Single-Cone Sprint Drill",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singleleg_high_box_squat",
+ "name": "Single-Leg High Box Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singleleg_hop_progression",
+ "name": "Single-Leg Hop Progression",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singleleg_lateral_hop",
+ "name": "Single-Leg Lateral Hop",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singleleg_leg_extension",
+ "name": "Single-Leg Leg Extension",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singleleg_stride_jump",
+ "name": "Single-Leg Stride Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sit_squats",
+ "name": "Sit Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "skating",
+ "name": "Skating",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_drag__harness",
+ "name": "Sled Drag - Harness",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_push",
+ "name": "Sled Push",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_leg_press",
+ "name": "Smith Machine Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_pistol_squat",
+ "name": "Smith Machine Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_squat_smith_machine",
+ "name": "Squat - Smith Machine",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_singleleg_split_squat",
+ "name": "Smith Single-Leg Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch",
+ "name": "Snatch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_balance",
+ "name": "Snatch Balance",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_from_blocks",
+ "name": "Snatch From Blocks",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [
+ "Snatch from Blocks"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "speed_box_squat",
+ "name": "Speed Box Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "speed_squats",
+ "name": "Speed Squats",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_clean",
+ "name": "Split Clean",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_jerk",
+ "name": "Split Jerk",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals",
+ "Traps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_jump",
+ "name": "Split Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "split_squat_with_dumbbells",
+ "name": "Split Squat With Dumbbells",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Split Squat with Dumbbells"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_jerk",
+ "name": "Squat Jerk",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_with_bands",
+ "name": "Squat With Bands",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [
+ "Squat with Bands"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_with_chains",
+ "name": "Squat With Chains",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Squat with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_with_plate_movers",
+ "name": "Squat With Plate Movers",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Squat with Plate Movers"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squats__with_bands",
+ "name": "Squats - With Bands",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stairmaster",
+ "name": "Stairmaster",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_elevated_quad_stretch",
+ "name": "Standing Elevated Quad Stretch",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_hip_flexors",
+ "name": "Standing Hip Flexors",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_long_jump",
+ "name": "Standing Long Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "star_jump",
+ "name": "Star Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "step_mill",
+ "name": "Step Mill",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stride_jump_crossover",
+ "name": "Stride Jump Crossover",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "suspended_split_squat",
+ "name": "Suspended Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tire_flip",
+ "name": "Tire Flip",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trail_runningwalking",
+ "name": "Trail Running/Walking",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "trap_bar_deadlift",
+ "name": "Trap Bar Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "walking_treadmill",
+ "name": "Walking, Treadmill",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_jump_squat",
+ "name": "Weighted Jump Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_sissy_squat",
+ "name": "Weighted Sissy Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_squat",
+ "name": "Weighted Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wide_stance_barbell_squat",
+ "name": "Wide Stance Barbell Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "yoke_walk",
+ "name": "Yoke Walk",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_cable_shoulder_press",
+ "name": "Alternating Cable Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_deltoid_raise",
+ "name": "Alternating Deltoid Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_kettlebell_press",
+ "name": "Alternating Kettlebell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "antigravity_press",
+ "name": "Anti-Gravity Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "arm_circles",
+ "name": "Arm Circles",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "arnold_dumbbell_press",
+ "name": "Arnold Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "back_flyes__with_bands",
+ "name": "Back Flyes - With Bands",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "backward_medicine_ball_throw",
+ "name": "Backward Medicine Ball Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "band_pull_apart",
+ "name": "Band Pull Apart",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Pull-Apart - Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_incline_shoulder_raise",
+ "name": "Barbell Incline Shoulder Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_rear_delt_row_barbell",
+ "name": "Rear Delt Row - Barbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Rear Delt Row"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_shoulder_press",
+ "name": "Barbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battling_ropes",
+ "name": "Battling Ropes",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_dumbbell_rear_delt_raise_with_head_on_bench",
+ "name": "Bent Over Dumbbell Rear Delt Raise With Head on Bench",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bent Over Dumbbell Rear Delt Raise With Head On Bench"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_lowpulley_side_lateral",
+ "name": "Bent Over Low-Pulley Side Lateral",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bradfordrocky_presses",
+ "name": "Bradford/Rocky Presses",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Traps",
+ "Core"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [
+ "Bradford Press",
+ "Rocky Press"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_internal_rotation",
+ "name": "Cable Internal Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_rear_delt_fly",
+ "name": "Cable Rear Delt Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_rope_reardelt_rows",
+ "name": "Cable Rope Rear-Delt Rows",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_seated_lateral_raise",
+ "name": "Cable Seated Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_shoulder_press",
+ "name": "Cable Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "car_drivers",
+ "name": "Car Drivers",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chair_upper_body_stretch",
+ "name": "Chair Upper Body Stretch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "circus_bell",
+ "name": "Circus Bell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_and_jerk",
+ "name": "Clean and Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_and_press",
+ "name": "Clean and Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crucifix",
+ "name": "Crucifix",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cuban_press",
+ "name": "Cuban Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_jerk",
+ "name": "Double Kettlebell Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_push_press",
+ "name": "Double Kettlebell Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_snatch",
+ "name": "Double Kettlebell Snatch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_incline_shoulder_raise",
+ "name": "Dumbbell Incline Shoulder Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lying_onearm_rear_lateral_raise",
+ "name": "Dumbbell Lying One-Arm Rear Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lying_rear_lateral_raise",
+ "name": "Dumbbell Lying Rear Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_onearm_shoulder_press",
+ "name": "Dumbbell One-Arm Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_onearm_upright_row",
+ "name": "Dumbbell One-Arm Upright Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_raise",
+ "name": "Dumbbell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_scaption",
+ "name": "Dumbbell Scaption",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_shoulder_press",
+ "name": "Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elbow_circles",
+ "name": "Elbow Circles",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "external_rotation",
+ "name": "External Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "external_rotation_with_band",
+ "name": "External Rotation With Band",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "External Rotation with Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "external_rotation_with_cable",
+ "name": "External Rotation With Cable",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "External Rotation with Cable"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "face_pull",
+ "name": "Face Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_cable_raise",
+ "name": "Front Cable Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_dumbbell_raise",
+ "name": "Front Dumbbell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_incline_dumbbell_raise",
+ "name": "Front Incline Dumbbell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_plate_raise",
+ "name": "Front Plate Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_twodumbbell_raise",
+ "name": "Front Two-Dumbbell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "handstand_pushups",
+ "name": "Handstand Push-Ups",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [
+ "HSPU",
+ "Handstand Push-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "internal_rotation_with_band",
+ "name": "Internal Rotation With Band",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Internal Rotation with Band"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "iron_cross",
+ "name": "Iron Cross",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jerk_balance",
+ "name": "Jerk Balance",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_arnold_press",
+ "name": "Kettlebell Arnold Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_pirate_ships",
+ "name": "Kettlebell Pirate Ships",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_seated_press",
+ "name": "Kettlebell Seated Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_seesaw_press",
+ "name": "Kettlebell Seesaw Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_thruster",
+ "name": "Kettlebell Thruster",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_turkish_getup_lunge_style",
+ "name": "Kettlebell Turkish Get-up (lunge Style)",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders",
+ "Glutes",
+ "Quadriceps",
+ "Hamstrings",
+ "Traps",
+ "Lats"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [
+ "Kettlebell Turkish Get-Up (Lunge style)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_strengthlog",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kettlebell_turkish_getup_squat_style",
+ "name": "Kettlebell Turkish Get-up (squat Style)",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders",
+ "Glutes",
+ "Quadriceps",
+ "Hamstrings",
+ "Traps",
+ "Lats"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [
+ "Kettlebell Turkish Get-Up (Squat style)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_strengthlog",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kneeling_arm_drill",
+ "name": "Kneeling Arm Drill",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_linear_jammer",
+ "name": "Landmine Linear Jammer",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_raise__with_bands",
+ "name": "Lateral Raise - With Bands",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_shoulder_press",
+ "name": "Leverage Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "log_lift",
+ "name": "Log Lift",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_pulley_row_to_neck",
+ "name": "Low Pulley Row to Neck",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Low Pulley Row To Neck"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_onearm_lateral_raise",
+ "name": "Lying One-Arm Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_rear_delt_raise",
+ "name": "Lying Rear Delt Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_shoulder_military_press",
+ "name": "Machine Shoulder (military) Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Machine Shoulder (Military) Press"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "medicine_ball_scoop_throw",
+ "name": "Medicine Ball Scoop Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "onearm_incline_lateral_raise",
+ "name": "One-Arm Incline Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_clean_and_jerk",
+ "name": "One-Arm Kettlebell Clean and Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_jerk",
+ "name": "One-Arm Kettlebell Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_military_press_to_the_side",
+ "name": "One-Arm Kettlebell Military Press to the Side",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "One-Arm Kettlebell Military Press To The Side"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_para_press",
+ "name": "One-Arm Kettlebell Para Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_push_press",
+ "name": "One-Arm Kettlebell Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_snatch",
+ "name": "One-Arm Kettlebell Snatch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_split_jerk",
+ "name": "One-Arm Kettlebell Split Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_kettlebell_split_snatch",
+ "name": "One-Arm Kettlebell Split Snatch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "onearm_side_laterals",
+ "name": "One-Arm Side Laterals",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "power_partials",
+ "name": "Power Partials",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_press",
+ "name": "Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_press__behind_the_neck",
+ "name": "Push Press - Behind the Neck",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rack_delivery",
+ "name": "Rack Delivery",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "return_push_from_stance",
+ "name": "Return Push From Stance",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Return Push from Stance"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_flyes",
+ "name": "Reverse Flyes",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_flyes_with_external_rotation",
+ "name": "Reverse Flyes With External Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_machine_flyes",
+ "name": "Reverse Machine Flyes",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "round_the_world_shoulder_stretch",
+ "name": "Round the World Shoulder Stretch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Round The World Shoulder Stretch"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_barbell_military_press",
+ "name": "Seated Barbell Military Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_bentover_rear_delt_raise",
+ "name": "Seated Bent-Over Rear Delt Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_cable_shoulder_press",
+ "name": "Seated Cable Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_press",
+ "name": "Seated Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_front_deltoid",
+ "name": "Seated Front Deltoid",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_side_lateral_raise",
+ "name": "Seated Side Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seesaw_press_alternating_side_press",
+ "name": "See-Saw Press (alternating Side Press)",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "See-Saw Press (Alternating Side Press)"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shoulder_circles",
+ "name": "Shoulder Circles",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shoulder_press__with_bands",
+ "name": "Shoulder Press - With Bands",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shoulder_raise",
+ "name": "Shoulder Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shoulder_stretch",
+ "name": "Shoulder Stretch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_lateral_raise",
+ "name": "Side Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_laterals_to_front_raise",
+ "name": "Side Laterals to Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_wrist_pull",
+ "name": "Side Wrist Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_dumbbell_raise",
+ "name": "Single Dumbbell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "singlearm_linear_jammer",
+ "name": "Single-Arm Linear Jammer",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_overhead_backward_walk",
+ "name": "Sled Overhead Backward Walk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_reverse_flye",
+ "name": "Sled Reverse Flye",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_incline_shoulder_raise",
+ "name": "Smith Incline Shoulder Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_onearm_upright_row",
+ "name": "Smith Machine One-Arm Upright Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_overhead_shoulder_press",
+ "name": "Smith Machine Overhead Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_alternating_dumbbell_press",
+ "name": "Standing Alternating Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_barbell_press_behind_neck",
+ "name": "Standing Barbell Press Behind Neck",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_bradford_press",
+ "name": "Standing Bradford Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_press",
+ "name": "Standing Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_straightarm_front_delt_raise_above_head",
+ "name": "Standing Dumbbell Straight-Arm Front Delt Raise Above Head",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_front_barbell_raise_over_head",
+ "name": "Standing Front Barbell Raise Over Head",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_lowpulley_deltoid_raise",
+ "name": "Standing Low-Pulley Deltoid Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_military_press",
+ "name": "Standing Military Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_palmin_onearm_dumbbell_press",
+ "name": "Standing Palm-In One-Arm Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_palmsin_dumbbell_press",
+ "name": "Standing Palms-In Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_twoarm_overhead_throw",
+ "name": "Standing Two-Arm Overhead Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "straight_raises_on_incline_bench",
+ "name": "Straight Raises on Incline Bench",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "twoarm_kettlebell_clean",
+ "name": "Two-Arm Kettlebell Clean",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "twoarm_kettlebell_jerk",
+ "name": "Two-Arm Kettlebell Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals",
+ "Glutes",
+ "Hamstrings",
+ "Quadriceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "twoarm_kettlebell_military_press",
+ "name": "Two-Arm Kettlebell Military Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upright_barbell_row",
+ "name": "Upright Barbell Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upward_stretch",
+ "name": "Upward Stretch",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_shrug",
+ "name": "Barbell Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_shrug_behind_the_back",
+ "name": "Barbell Shrug Behind the Back",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Shrug Behind The Back"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calfmachine_shoulder_shrug",
+ "name": "Calf-Machine Shoulder Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clean_shrug",
+ "name": "Clean Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_shrug",
+ "name": "Dumbbell Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_sumo_high_pull",
+ "name": "Kettlebell Sumo High Pull",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leverage_shrug",
+ "name": "Leverage Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "scapular_pullup",
+ "name": "Scapular Pull-up",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Scapular Pull-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_behind_the_back_shrug",
+ "name": "Smith Machine Behind the Back Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_upright_row",
+ "name": "Smith Machine Upright Row",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_shrug",
+ "name": "Snatch Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_upright_row",
+ "name": "Standing Dumbbell Upright Row",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upright_cable_row",
+ "name": "Upright Cable Row",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upright_row__with_bands",
+ "name": "Upright Row - With Bands",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_skull_crusher",
+ "name": "Band Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_dips",
+ "name": "Bench Dips",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_press__powerlifting",
+ "name": "Bench Press - Powerlifting",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_press_with_chains",
+ "name": "Bench Press With Chains",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bench Press with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "board_press",
+ "name": "Board Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "body_tricep_press",
+ "name": "Body Tricep Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyup",
+ "name": "Body-up",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Body-Up"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_incline_triceps_extension",
+ "name": "Cable Incline Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_lying_triceps_extension",
+ "name": "Cable Lying Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_one_arm_tricep_extension",
+ "name": "Cable One Arm Tricep Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_rope_overhead_triceps_extension",
+ "name": "Cable Rope Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chain_handle_extension",
+ "name": "Chain Handle Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_barbell_bench_press",
+ "name": "Close-Grip Barbell Bench Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_dumbbell_press",
+ "name": "Close-Grip Dumbbell Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_ezbar_press",
+ "name": "Close-Grip EZ-Bar Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "closegrip_pushup_off_of_a_dumbbell",
+ "name": "Close-Grip Push-up Off of A Dumbbell",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Close-Grip Push-Up off of a Dumbbell"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_closegrip_bench_to_skull_crusher",
+ "name": "Decline Close-Grip Bench to Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Decline Close-Grip Bench To Skull Crusher"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_dumbbell_triceps_extension",
+ "name": "Decline Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_ez_bar_triceps_extension",
+ "name": "Decline EZ Bar Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dip_machine",
+ "name": "Dip Machine",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dips__triceps_version",
+ "name": "Dips - Triceps Version",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Dip Bars",
+ "apparatus": [
+ "Dip Bars"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_floor_press",
+ "name": "Dumbbell Floor Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_onearm_triceps_extension",
+ "name": "Dumbbell One-Arm Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_tricep_extension_pronated_grip",
+ "name": "Dumbbell Tricep Extension -Pronated Grip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ezbar_skullcrusher",
+ "name": "EZ-Bar Skullcrusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "floor_press",
+ "name": "Floor Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "floor_press_with_chains",
+ "name": "Floor Press With Chains",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Floor Press with Chains"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_barbell_triceps_extension",
+ "name": "Incline Barbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_pushup_closegrip",
+ "name": "Incline Push-up Close-Grip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Push-Up Close-Grip"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jm_press",
+ "name": "JM Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_cable_triceps_extension",
+ "name": "Kneeling Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_cable_triceps_extension",
+ "name": "Low Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_closegrip_barbell_triceps_extension_behind_the_head",
+ "name": "Lying Close-Grip Barbell Triceps Extension Behind the Head",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Lying Close-Grip Barbell Triceps Extension Behind The Head"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_closegrip_barbell_triceps_press_to_chin",
+ "name": "Lying Close-Grip Barbell Triceps Press to Chin",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Lying Close-Grip Barbell Triceps Press To Chin"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_dumbbell_tricep_extension",
+ "name": "Lying Dumbbell Tricep Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_triceps_press",
+ "name": "Lying Triceps Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_triceps_extension",
+ "name": "Machine Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_floor_press",
+ "name": "One Arm Floor Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_pronated_dumbbell_triceps_extension",
+ "name": "One Arm Pronated Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_supinated_dumbbell_triceps_extension",
+ "name": "One Arm Supinated Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_triceps",
+ "name": "Overhead Triceps",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "parallel_bar_dip",
+ "name": "Parallel Bar Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Dip Bars",
+ "apparatus": [
+ "Dip Bars"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pin_presses",
+ "name": "Pin Presses",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pushups__close_triceps_position",
+ "name": "Push-Ups - Close Triceps Position",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Press-Up",
+ "Pushup"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "reverse_band_bench_press",
+ "name": "Reverse Band Bench Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_grip_triceps_pushdown",
+ "name": "Reverse Grip Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_triceps_bench_press",
+ "name": "Reverse Triceps Bench Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_dips",
+ "name": "Ring Dips",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_bentover_onearm_dumbbell_triceps_extension",
+ "name": "Seated Bent-Over One-Arm Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_bentover_twoarm_dumbbell_triceps_extension",
+ "name": "Seated Bent-Over Two-Arm Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_triceps_press",
+ "name": "Seated Triceps Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_overhead_triceps_extension",
+ "name": "Sled Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_closegrip_bench_press",
+ "name": "Smith Machine Close-Grip Bench Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "speed_band_overhead_triceps",
+ "name": "Speed Band Overhead Triceps",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_bentover_onearm_dumbbell_triceps_extension",
+ "name": "Standing Bent-Over One-Arm Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_bentover_twoarm_dumbbell_triceps_extension",
+ "name": "Standing Bent-Over Two-Arm Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_triceps_extension",
+ "name": "Standing Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_lowpulley_onearm_triceps_extension",
+ "name": "Standing Low-Pulley One-Arm Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_onearm_dumbbell_triceps_extension",
+ "name": "Standing One-Arm Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_overhead_barbell_triceps_extension",
+ "name": "Standing Overhead Barbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_towel_triceps_extension",
+ "name": "Standing Towel Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Core"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Towel"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "supine_chest_throw",
+ "name": "Supine Chest Throw",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "tate_press",
+ "name": "Tate Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tricep_dumbbell_kickback",
+ "name": "Tricep Dumbbell Kickback",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tricep_side_stretch",
+ "name": "Tricep Side Stretch",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "triceps_overhead_extension_with_rope",
+ "name": "Triceps Overhead Extension With Rope",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Triceps Overhead Extension with Rope"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "triceps_pushdown",
+ "name": "Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "triceps_pushdown__rope_attachment",
+ "name": "Triceps Pushdown - Rope Attachment",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "triceps_pushdown__vbar_attachment",
+ "name": "Triceps Pushdown - V-Bar Attachment",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "triceps_stretch",
+ "name": "Triceps Stretch",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_bench_dip",
+ "name": "Weighted Bench Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_calf_raise_leg_press_machine",
+ "name": "Calf Raise - Leg Press Machine",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_close_grip_feet_up_bench_press_barbell",
+ "name": "Close-Grip Feet-up Bench Press - Barbell",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Close-Grip Feet-Up Bench Press - Barbell"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_deadlift_trap_bar_high_handles",
+ "name": "Deadlift - Trap Bar High Handles",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_deadlift_trap_bar_low_handles",
+ "name": "Deadlift - Trap Bar Low Handles",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_external_shoulder_rotation_band",
+ "name": "External Shoulder Rotation - Band",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_external_shoulder_rotation_cable",
+ "name": "External Shoulder Rotation - Cable",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_glute_kickback_machine",
+ "name": "Glute Kickback - Machine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hack_squat_landmine",
+ "name": "Hack Squat - Landmine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Hack Squat Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hack_squat_machine",
+ "name": "Hack Squat - Machine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Hack Squat Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_high_to_low_wood_chop_cable",
+ "name": "High to Low Wood Chop - Cable",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hip_abduction_band",
+ "name": "Hip Abduction - Band",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hip_abduction_machine",
+ "name": "Hip Abduction - Machine",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_hip_adduction_machine",
+ "name": "Hip Adduction - Machine",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_horizontal_external_shoulder_rotation_dumbbell",
+ "name": "Horizontal External Shoulder Rotation - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_horizontal_internal_shoulder_rotation_dumbbell",
+ "name": "Horizontal Internal Shoulder Rotation - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_horizontal_wood_chop_band",
+ "name": "Horizontal Wood Chop - Band",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_horizontal_wood_chop_cable",
+ "name": "Horizontal Wood Chop - Cable",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_internal_shoulder_rotation_band",
+ "name": "Internal Shoulder Rotation - Band",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_internal_shoulder_rotation_cable",
+ "name": "Internal Shoulder Rotation - Cable",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_landmine_rotation",
+ "name": "Landmine Rotation",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_leg_press_machine",
+ "name": "Leg Press - Machine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_lying_external_shoulder_rotation_dumbbell",
+ "name": "Lying External Shoulder Rotation - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_lying_internal_shoulder_rotation_dumbbell",
+ "name": "Lying Internal Shoulder Rotation - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_one_handed_shoulder_press_landmine",
+ "name": "One-Handed Shoulder Press - Landmine",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_pause_squat_barbell",
+ "name": "Pause Squat - Barbell",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_pullover_barbell",
+ "name": "Pullover - Barbell",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_pullover_dumbbell",
+ "name": "Pullover - Dumbbell",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_rear_delt_row_cable",
+ "name": "Rear Delt Row - Cable",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_rear_delt_row_dumbbell",
+ "name": "Rear Delt Row - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_row_t_bar",
+ "name": "Row - T-Bar",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_seated_shoulder_press_smith_machine",
+ "name": "Seated Shoulder Press - Smith Machine",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_shrug_trap_bar",
+ "name": "Shrug - Trap Bar",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_single_arm_half_kneeling_high_row_cable",
+ "name": "Single Arm Half Kneeling High Row - Cable",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_single_leg_romanian_deadlift_landmine",
+ "name": "Single-Leg Romanian Deadlift - Landmine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_squat_belt",
+ "name": "Squat - Belt",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_squat_landmine",
+ "name": "Squat - Landmine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_stability_ball_pullover_dumbbell",
+ "name": "Stability Ball Pullover - Dumbbell",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_standing_external_shoulder_rotation_dumbbell",
+ "name": "Standing External Shoulder Rotation - Dumbbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_standing_glute_kickback_machine",
+ "name": "Standing Glute Kickback - Machine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Quadriceps",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_fly",
+ "name": "Cable Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_fly_low_to_high",
+ "name": "Cable Fly Low to High",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_fly_high_to_low",
+ "name": "Cable Fly High to Low",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_chest_press",
+ "name": "Machine Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_incline_chest_press",
+ "name": "Machine Incline Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_supported_row",
+ "name": "Chest-Supported Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_supported_dumbbell_row",
+ "name": "Chest-Supported Dumbbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seal_row",
+ "name": "Seal Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pendlay_row",
+ "name": "Pendlay Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "meadows_row",
+ "name": "Meadows Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_pull_up_machine",
+ "name": "Assisted Pull-up Machine",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_lateral_raise_single_arm",
+ "name": "Cable Lateral Raise (single Arm)",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_lateral_raise",
+ "name": "Machine Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_pec_deck",
+ "name": "Reverse Pec Deck",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bulgarian_split_squat",
+ "name": "Bulgarian Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RFESS",
+ "Rear-Foot-Elevated Split Squat"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "belt_squat",
+ "name": "Belt Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "safety_bar_squat",
+ "name": "Safety Bar Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "nordic_hamstring_curl",
+ "name": "Nordic Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tibialis_raise",
+ "name": "Tibialis Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tibialis_raise_machine",
+ "name": "Tibialis Raise (machine)",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ski_erg",
+ "name": "Ski Erg",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clamshell",
+ "name": "Clamshell",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "fire_hydrant",
+ "name": "Fire Hydrant",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_skater_jump",
+ "name": "Lateral Skater Jump",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_lying_hip_abduction",
+ "name": "Side-Lying Hip Abduction",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_hip_abduction",
+ "name": "Standing Cable Hip Abduction",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "banded_clamshell",
+ "name": "Banded Clamshell",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "banded_hip_abduction",
+ "name": "Banded Hip Abduction",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "banded_lateral_walk",
+ "name": "Banded Lateral Walk",
+ "primaryMuscle": "Abductors",
+ "primaryMuscles": [
+ "Abductors"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ape_walk",
+ "name": "Ape Walk",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "carioca",
+ "name": "Carioca",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Abdominals",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "copenhagen_plank",
+ "name": "Copenhagen Plank",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "copenhagen_side_plank_raise",
+ "name": "Copenhagen Side Plank Raise",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cossack_squat",
+ "name": "Cossack Squat",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deep_squat_pry",
+ "name": "Deep Squat Pry",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "grapevine_step",
+ "name": "Grapevine Step",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Abdominals",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_lunge",
+ "name": "Side Lunge",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_lying_hip_adduction",
+ "name": "Side-Lying Hip Adduction",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_lateral_lunge",
+ "name": "Cable Lateral Lunge",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_hip_adduction",
+ "name": "Standing Cable Hip Adduction",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_cossack_squat",
+ "name": "Dumbbell Cossack Squat",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_cossack_squat",
+ "name": "Landmine Cossack Squat",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_sled_drag",
+ "name": "Lateral Sled Drag",
+ "primaryMuscle": "Adductors",
+ "primaryMuscles": [
+ "Adductors"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Glutes"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "21s_curl",
+ "name": "21s Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_preacher_curl",
+ "name": "Barbell Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cheat_curl",
+ "name": "Cheat Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_curl",
+ "name": "Reverse Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "scott_curl",
+ "name": "Scott Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_biceps_curl",
+ "name": "Bodyweight Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bar Curl"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_biceps_curl",
+ "name": "Ring Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bayesian_cable_curl",
+ "name": "Bayesian Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "behind_the_back_cable_curl",
+ "name": "Behind-the-Back Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_crossover_biceps_curl",
+ "name": "Cable Crossover Biceps Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_curl",
+ "name": "Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_curl_with_bar",
+ "name": "Cable Curl With Bar",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_curl_with_rope",
+ "name": "Cable Curl With Rope",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_hammer_curl",
+ "name": "Cable Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ez_bar_cable_curl",
+ "name": "EZ-Bar Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "face_away_bayesian_cable_curl",
+ "name": "Face-Away Bayesian Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_cable_curl",
+ "name": "Low Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_cable_curl_on_bench",
+ "name": "Lying Cable Curl on Bench",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_cable_curl_on_floor",
+ "name": "Lying Cable Curl on Floor",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rope_hammer_curl",
+ "name": "Rope Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_curl",
+ "name": "Single-Arm Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straight_bar_cable_curl",
+ "name": "Straight-Bar Cable Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_dumbbell_curl",
+ "name": "Alternating Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bayesian_dumbbell_curl",
+ "name": "Bayesian Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "concentration_curls",
+ "name": "Concentration Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Concentration Curls"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_curl",
+ "name": "Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_preacher_curl",
+ "name": "Dumbbell Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_spider_curl",
+ "name": "Dumbbell Spider Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_hammer_curls",
+ "name": "Incline Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Incline Hammer Curls"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "preacher_hammer_curl",
+ "name": "Preacher Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prone_incline_dumbbell_curl",
+ "name": "Prone Incline Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_dumbbell_curl",
+ "name": "Reverse Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_alternating_dumbbell_curl",
+ "name": "Seated Alternating Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_hammer_curl",
+ "name": "Seated Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_dumbbell_preacher_curl",
+ "name": "Single-Arm Dumbbell Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_curl",
+ "name": "Standing Dumbbell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "waiter_curl",
+ "name": "Waiter Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ez_bar_preacher_curl",
+ "name": "EZ-Bar Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_ez_bar_curl",
+ "name": "Reverse EZ-Bar Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_ez_bar_curl",
+ "name": "Standing EZ-Bar Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wide_grip_ez_bar_curl",
+ "name": "Wide-Grip EZ-Bar Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_curl",
+ "name": "Kettlebell Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_hammer_curl",
+ "name": "Kettlebell Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_curl",
+ "name": "Machine Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_preacher_curls",
+ "name": "Machine Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Machine Preacher Curls"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "preacher_curl_machine",
+ "name": "Preacher Curl Machine",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_curl",
+ "name": "Band Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_hammer_curl",
+ "name": "Band Hammer Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_preacher_curl",
+ "name": "Band Preacher Curl",
+ "primaryMuscle": "Biceps",
+ "primaryMuscles": [
+ "Biceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_calf_raise",
+ "name": "Barbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ankle_rocker",
+ "name": "Ankle Rocker",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "calf_raise_hold",
+ "name": "Calf Raise Hold",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "heel_walk",
+ "name": "Heel Walk",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pogo_jump",
+ "name": "Pogo Jump",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_bodyweight_calf_raise",
+ "name": "Seated Bodyweight Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_calf_raise",
+ "name": "Single-Leg Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_pogo_jump",
+ "name": "Single-Leg Pogo Jump",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_standing_calf_raise",
+ "name": "Single-Leg Standing Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_tibialis_raise",
+ "name": "Single-Leg Tibialis Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "toe_raise",
+ "name": "Toe Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "toe_walk",
+ "name": "Toe Walk",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_tibialis_raise",
+ "name": "Wall Tibialis Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_calf_raise",
+ "name": "Dumbbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_calf_raise",
+ "name": "Seated Dumbbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_dumbbell_calf_raise",
+ "name": "Single-Leg Dumbbell Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "donkey_calf_raise_machine",
+ "name": "Donkey Calf Raise Machine",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leg_press_calf_raise",
+ "name": "Leg Press Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_calf_raise_machine",
+ "name": "Seated Calf Raise Machine",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_calf_raise_machine",
+ "name": "Standing Calf Raise Machine",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_tibialis_raise",
+ "name": "Band Tibialis Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_seated_calf_raise",
+ "name": "Smith Machine Seated Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_standing_calf_raise",
+ "name": "Smith Machine Standing Calf Raise",
+ "primaryMuscle": "Calves",
+ "primaryMuscles": [
+ "Calves"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_bench_press",
+ "name": "Barbell Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_press",
+ "name": "Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_bench_press",
+ "name": "Decline Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "feet_up_bench_press",
+ "name": "Feet-up Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_bench_press",
+ "name": "Incline Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "larsen_press",
+ "name": "Larsen Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "paused_bench_press",
+ "name": "Paused Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pin_press",
+ "name": "Pin Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_grip_bench_press",
+ "name": "Reverse-Grip Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spoto_press",
+ "name": "Spoto Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "archer_push_up",
+ "name": "Archer Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "aztec_push_up",
+ "name": "Aztec Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clap_push_up",
+ "name": "Clap Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deficit_push_up",
+ "name": "Deficit Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dive_bomber_push_up",
+ "name": "Dive Bomber Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "eccentric_push_up",
+ "name": "Eccentric Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "explosive_push_up",
+ "name": "Explosive Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hindu_push_up",
+ "name": "Hindu Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "knee_push_up",
+ "name": "Knee Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Kneeling Push-up"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_push_up",
+ "name": "Negative Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "offset_push_up",
+ "name": "Offset Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "planche_lean_push_up",
+ "name": "Planche Lean Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pseudo_planche_push_up",
+ "name": "Pseudo Planche Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_up_with_single_leg_raise",
+ "name": "Push-up With Single-Leg Raise",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Single-Leg Push-up"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_archer_push_up",
+ "name": "Ring Archer Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_fly",
+ "name": "Ring Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [
+ "Ring Chest Fly"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_push_up",
+ "name": "Ring Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spiderman_push_up",
+ "name": "Spiderman Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "staggered_push_up",
+ "name": "Staggered Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "superman_push_up",
+ "name": "Superman Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "typewriter_push_up",
+ "name": "Typewriter Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_push_up",
+ "name": "Wall Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Wall Push-up"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_vest_push_up",
+ "name": "Weighted Vest Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Weighted Vest",
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_exrx",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "cable_chest_fly_to_press",
+ "name": "Cable Chest Fly to Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_press_around",
+ "name": "Cable Press-Around",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_to_low_cable_fly",
+ "name": "High-to-Low Cable Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_to_high_cable_fly",
+ "name": "Low-to-High Cable Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "mid_cable_fly",
+ "name": "Mid Cable Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_cable_chest_fly",
+ "name": "Seated Cable Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_fly",
+ "name": "Single-Arm Cable Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_press_around",
+ "name": "Single-Arm Cable Press-Around",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_chest_fly",
+ "name": "Standing Cable Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_dumbbell_chest_fly",
+ "name": "Decline Dumbbell Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_dumbbell_chest_press",
+ "name": "Decline Dumbbell Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_chest_fly",
+ "name": "Dumbbell Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_chest_press",
+ "name": "Dumbbell Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_guillotine_press",
+ "name": "Dumbbell Guillotine Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_hex_press",
+ "name": "Dumbbell Hex Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_squeeze_press",
+ "name": "Dumbbell Squeeze Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flat_dumbbell_fly",
+ "name": "Flat Dumbbell Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "flat_dumbbell_press",
+ "name": "Flat Dumbbell Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_chest_fly",
+ "name": "Incline Dumbbell Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_chest_press",
+ "name": "Incline Dumbbell Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_incline_dumbbell_press",
+ "name": "Low-Incline Dumbbell Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_landmine_chest_press",
+ "name": "Kneeling Landmine Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_chest_press",
+ "name": "Landmine Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "converging_chest_press",
+ "name": "Converging Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_machine_chest_press",
+ "name": "Decline Machine Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_machine_chest_press",
+ "name": "Incline Machine Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_chest_fly",
+ "name": "Machine Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pec_deck_fly",
+ "name": "Pec Deck Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_chest_press",
+ "name": "Plate-Loaded Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "medicine_ball_push_up",
+ "name": "Medicine Ball Push-up",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "rotational_medicine_ball_chest_pass",
+ "name": "Rotational Medicine Ball Chest Pass",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "plate_press",
+ "name": "Plate Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_chest_fly",
+ "name": "Band Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_chest_press",
+ "name": "Band Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "banded_push_up",
+ "name": "Banded Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_bench_press",
+ "name": "Smith Machine Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_incline_press",
+ "name": "Smith Machine Incline Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_reverse_grip_bench_press",
+ "name": "Smith Machine Reverse-Grip Bench Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_push_up",
+ "name": "Stability Ball Push-up",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_chest_fly",
+ "name": "TRX Chest Fly",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_chest_press",
+ "name": "TRX Chest Press",
+ "primaryMuscle": "Chest",
+ "primaryMuscles": [
+ "Chest"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battle_rope_alternating_waves",
+ "name": "Battle Rope Alternating Waves",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battle_rope_circles",
+ "name": "Battle Rope Circles",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battle_rope_double_waves",
+ "name": "Battle Rope Double Waves",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battle_rope_jumping_jacks",
+ "name": "Battle Rope Jumping Jacks",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "battle_rope_slams",
+ "name": "Battle Rope Slams",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals",
+ "Lats"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Battle Rope",
+ "apparatus": [
+ "Battle Rope"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "burpee",
+ "name": "Burpee",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Quadriceps",
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "burpee_broad_jump",
+ "name": "Burpee Broad Jump",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "burpee_tuck_jump",
+ "name": "Burpee Tuck Jump",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "butt_kicks",
+ "name": "Butt Kicks",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crawl_to_push_up",
+ "name": "Crawl to Push-up",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cross_jack",
+ "name": "Cross Jack",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Adductors",
+ "Abductors",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "fast_feet",
+ "name": "Fast Feet",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frogger",
+ "name": "Frogger",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "half_burpee",
+ "name": "Half Burpee",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_knees",
+ "name": "High Knees",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jumping_jack",
+ "name": "Jumping Jack",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Shoulders",
+ "Abductors"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_shuffle",
+ "name": "Lateral Shuffle",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Adductors",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "mountain_climbers",
+ "name": "Mountain Climber",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Mountain Climbers"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_up_burpee",
+ "name": "Push-up Burpee",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Quadriceps",
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "running_in_place",
+ "name": "Running In Place",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Quadriceps",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seal_jack",
+ "name": "Seal Jack",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sprawl",
+ "name": "Sprawl",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_thrust",
+ "name": "Squat Thrust",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Quadriceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assault_bike",
+ "name": "Assault Bike",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_under",
+ "name": "Double Under",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elliptical",
+ "name": "Elliptical",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_treadmill_walk",
+ "name": "Incline Treadmill Walk",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Glutes"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jump_rope",
+ "name": "Jump Rope",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "outdoor_run",
+ "name": "Outdoor Run",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rowing_machine",
+ "name": "Rowing Machine",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Lats",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spin_bike",
+ "name": "Spin Bike",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sprint",
+ "name": "Sprint",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stair_climber",
+ "name": "Stair Climber",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stationary_bike",
+ "name": "Stationary Bike",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "treadmill_run",
+ "name": "Treadmill Run",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "treadmill_walk",
+ "name": "Treadmill Walk",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Cardio Machine",
+ "apparatus": [
+ "Cardio Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "5_10_5_shuttle",
+ "name": "5-10-5 Shuttle",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "agility_ladder_high_knees",
+ "name": "Agility Ladder High Knees",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "agility_ladder_ickey_shuffle",
+ "name": "Agility Ladder Ickey Shuffle",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Quadriceps"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "agility_ladder_lateral_shuffle",
+ "name": "Agility Ladder Lateral Shuffle",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Adductors",
+ "Calves"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "cone_shuttle_run",
+ "name": "Cone Shuttle Run",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "burpee_pull_up",
+ "name": "Burpee Pull-up",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Chest",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prowler_push",
+ "name": "Prowler Push",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sled_pull",
+ "name": "Sled Pull",
+ "primaryMuscle": "Conditioning",
+ "primaryMuscles": [
+ "Conditioning"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Middle back"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bear_crawl",
+ "name": "Bear Crawl",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Quadriceps",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bear_crawl_shoulder_tap",
+ "name": "Bear Crawl Shoulder Tap",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Quadriceps",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bear_plank",
+ "name": "Bear Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Quadriceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bird_dog_crunch",
+ "name": "Bird Dog Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "boat_pose_hold",
+ "name": "Boat Pose Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "boat_pose_rocks",
+ "name": "Boat Pose Rocks",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "candlestick_roll",
+ "name": "Candlestick Roll",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crab_toe_touch",
+ "name": "Crab Toe Touch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dead_bug_heel_tap",
+ "name": "Dead Bug Heel Tap",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dragon_flag",
+ "name": "Dragon Flag",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dynamic_side_plank",
+ "name": "Dynamic Side Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hanging_l_sit_hold",
+ "name": "Hanging L-Sit Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_plank",
+ "name": "High Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hollow_body_flutter_kick",
+ "name": "Hollow Body Flutter Kick",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hollow_body_hold",
+ "name": "Hollow Body Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hollow_body_rock",
+ "name": "Hollow Body Rock",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hollow_to_arch_roll",
+ "name": "Hollow-to-Arch Roll",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lower back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "knee_plank",
+ "name": "Knee Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "l_sit_hold",
+ "name": "L-Sit Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_bear_crawl",
+ "name": "Lateral Bear Crawl",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Quadriceps",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "long_lever_plank",
+ "name": "Long-Lever Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_in_out",
+ "name": "Plank In-Out",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Plank In and Out"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_jack",
+ "name": "Plank Jack",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_shoulder_tap",
+ "name": "Plank Shoulder Tap",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_skiers",
+ "name": "Plank Skiers",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_up_down",
+ "name": "Plank Up-Down",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Plank up-down",
+ "Plank-up"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rkc_plank",
+ "name": "RKC Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_plank",
+ "name": "Reverse Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_plank_leg_lift",
+ "name": "Reverse Plank Leg Lift",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_plank_march",
+ "name": "Reverse Plank March",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "slow_mountain_climber",
+ "name": "Slow Mountain Climber",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straddle_v_up",
+ "name": "Straddle V-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Adductors"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "toes_to_bar",
+ "name": "Toes-to-Bar",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_dragon_flag",
+ "name": "Tuck Dragon Flag",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_l_sit_hold",
+ "name": "Tuck L-Sit Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "v_sit_hold",
+ "name": "V-Sit Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "v_up",
+ "name": "V-up",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [
+ "V-Up"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "walkout",
+ "name": "Walkout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [
+ "Inchworm Walkout"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_chop",
+ "name": "Cable Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_crunch_with_rope",
+ "name": "Cable Crunch With Rope",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_hip_flexor_raise",
+ "name": "Cable Hip Flexor Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_lift",
+ "name": "Cable Lift",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_pallof_press",
+ "name": "Cable Pallof Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_side_bend",
+ "name": "Cable Side Bend",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_wood_chop",
+ "name": "Cable Wood Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "half_kneeling_pallof_press",
+ "name": "Half-Kneeling Pallof Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_to_low_cable_wood_chop",
+ "name": "High-to-Low Cable Wood Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "horizontal_cable_wood_chop",
+ "name": "Horizontal Cable Wood Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kneeling_cable_crunch",
+ "name": "Kneeling Cable Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_to_high_cable_wood_chop",
+ "name": "Low-to-High Cable Wood Chop",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pallof_press_iso_hold",
+ "name": "Pallof Press Iso Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_crunch",
+ "name": "Standing Cable Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_hip_flexion",
+ "name": "Standing Cable Hip Flexion",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dead_bug_with_dumbbells",
+ "name": "Dead Bug With Dumbbells",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "suitcase_carry",
+ "name": "Suitcase Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_rack_carry",
+ "name": "Front Rack Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_around_the_world",
+ "name": "Kettlebell Around the World",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Core",
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_rack_carry",
+ "name": "Kettlebell Rack Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Middle back"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_suitcase_carry",
+ "name": "Kettlebell Suitcase Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_180s",
+ "name": "Landmine 180",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Lats"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Landmine 180's"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "landmine_anti_rotation",
+ "name": "Landmine Anti-Rotation",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_anti_rotation_press",
+ "name": "Landmine Anti-Rotation Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "captain_s_chair_knee_raise",
+ "name": "Captain's Chair Knee Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "captain_s_chair_leg_raise",
+ "name": "Captain's Chair Leg Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_ab_crunch",
+ "name": "Machine Ab Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rotary_torso_machine",
+ "name": "Rotary Torso Machine",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "medicine_ball_dead_bug",
+ "name": "Medicine Ball Dead Bug",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "medicine_ball_russian_twist",
+ "name": "Medicine Ball Russian Twist",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Obliques"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "medicine_ball_sit_up",
+ "name": "Medicine Ball Sit-up",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "medicine_ball_slam",
+ "name": "Medicine Ball Slam",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "medicine_ball_v_up",
+ "name": "Medicine Ball V-up",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "overhead_medicine_ball_slam",
+ "name": "Overhead Medicine Ball Slam",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "rotational_medicine_ball_slam",
+ "name": "Rotational Medicine Ball Slam",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Medicine Ball",
+ "apparatus": [
+ "Medicine Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "ab_roller",
+ "name": "Ab Wheel Rollout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Lats"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Ab Wheel"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Ab Roller"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "kneeling_ab_wheel_rollout",
+ "name": "Kneeling Ab Wheel Rollout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Lats"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Ab Wheel"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "standing_ab_wheel_rollout",
+ "name": "Standing Ab Wheel Rollout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Lats"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Ab Wheel"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": true,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger",
+ "source_exrx"
+ ]
+ },
+ {
+ "id": "plate_around_the_world",
+ "name": "Plate Around-the-World",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_plank",
+ "name": "Weighted Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hanging_knee_raise",
+ "name": "Hanging Knee Raise",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_l_sit",
+ "name": "Ring L-Sit",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_bear_hug_carry",
+ "name": "Sandbag Bear-Hug Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_shoulder_carry",
+ "name": "Sandbag Shoulder Carry",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_dead_bug",
+ "name": "Stability Ball Dead Bug",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_jackknife",
+ "name": "Stability Ball Jackknife",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_pike",
+ "name": "Stability Ball Pike",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_rollout",
+ "name": "Stability Ball Rollout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_stir_the_pot",
+ "name": "Stability Ball Stir-the-Pot",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_body_saw",
+ "name": "TRX Body Saw",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_fallout",
+ "name": "TRX Fallout",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_knee_tuck",
+ "name": "TRX Knee Tuck",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_pike",
+ "name": "TRX Pike",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_reverse_wrist_curl",
+ "name": "Barbell Reverse Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_wrist_curl",
+ "name": "Barbell Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dead_hang",
+ "name": "Dead Hang",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Middle back",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wrist_push_up_rock",
+ "name": "Wrist Push-up Rock",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_reverse_wrist_curl",
+ "name": "Cable Reverse Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_farmer_carry",
+ "name": "Dumbbell Farmer Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_pronation",
+ "name": "Dumbbell Pronation",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_reverse_wrist_curl",
+ "name": "Dumbbell Reverse Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_supination",
+ "name": "Dumbbell Supination",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_wrist_curl",
+ "name": "Dumbbell Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "farmer_carry",
+ "name": "Farmer Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "farmer_s_carry",
+ "name": "Farmer's Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "fat_grip_dumbbell_hold",
+ "name": "Fat Grip Dumbbell Hold",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_farmer_carry",
+ "name": "Kettlebell Farmer Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "gripper_crush",
+ "name": "Gripper Crush",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Hand Gripper"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_pronation",
+ "name": "Hammer Pronation",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Lever Hammer"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_supination",
+ "name": "Hammer Supination",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Lever Hammer"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rice_bucket_wrist_extension",
+ "name": "Rice Bucket Wrist Extension",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Rice Bucket"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rice_bucket_wrist_flexion",
+ "name": "Rice Bucket Wrist Flexion",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Rice Bucket"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_pinch_carry",
+ "name": "Plate Pinch Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_wrist_curl",
+ "name": "Plate Wrist Curl",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_wrist_extension",
+ "name": "Plate Wrist Extension",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "towel_hang",
+ "name": "Towel Hang",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trap_bar_farmer_carry",
+ "name": "Trap Bar Farmer Carry",
+ "primaryMuscle": "Forearms",
+ "primaryMuscles": [
+ "Forearms"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hang_power_clean",
+ "name": "Hang Power Clean",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "hang_power_snatch",
+ "name": "Hang Power Snatch",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "thruster",
+ "name": "Thruster",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Shoulders",
+ "Triceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "devil_press",
+ "name": "Devil Press",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "dumbbell_clean_and_press",
+ "name": "Dumbbell Clean and Press",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "dumbbell_snatch",
+ "name": "Dumbbell Snatch",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "dumbbell_thruster",
+ "name": "Dumbbell Thruster",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Shoulders",
+ "Triceps",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "single_arm_dumbbell_snatch",
+ "name": "Single-Arm Dumbbell Snatch",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "double_kettlebell_clean",
+ "name": "Double Kettlebell Clean",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kettlebell_clean",
+ "name": "Kettlebell Clean",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kettlebell_clean_and_press",
+ "name": "Kettlebell Clean and Press",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kettlebell_snatch",
+ "name": "Kettlebell Snatch",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "kettlebell_turkish_get_up",
+ "name": "Kettlebell Turkish Get-up",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders",
+ "Glutes",
+ "Quadriceps",
+ "Hamstrings",
+ "Traps",
+ "Lats"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_strengthlog",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "single_arm_kettlebell_clean",
+ "name": "Single-Arm Kettlebell Clean",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "single_arm_kettlebell_snatch",
+ "name": "Single-Arm Kettlebell Snatch",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "turkish_get_up",
+ "name": "Turkish Get-up",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders",
+ "Glutes",
+ "Quadriceps",
+ "Hamstrings",
+ "Traps",
+ "Lats"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_strengthlog",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "landmine_clean_and_press",
+ "name": "Landmine Clean and Press",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "landmine_rotation_press",
+ "name": "Landmine Rotation Press",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "landmine_thruster",
+ "name": "Landmine Thruster",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Shoulders",
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "atlas_stone_load",
+ "name": "Atlas Stone Load",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Other"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_ground_to_overhead",
+ "name": "Plate Ground-to-Overhead",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_clean",
+ "name": "Sandbag Clean",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Middle back"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_wger"
+ ]
+ },
+ {
+ "id": "sandbag_over_shoulder_toss",
+ "name": "Sandbag Over Shoulder Toss",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_shouldering",
+ "name": "Sandbag Shouldering",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "90_90_hip_switch",
+ "name": "90/90 Hip Switch",
+ "primaryMuscle": "Mobility",
+ "primaryMuscles": [
+ "Mobility"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "90/90 Hip Rotation"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "bodyweight_hip_thrust",
+ "name": "Bodyweight Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "curtsy_lunge",
+ "name": "Curtsy Lunge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Adductors",
+ "Abductors"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "donkey_kick",
+ "name": "Donkey Kick",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "feet_elevated_glute_bridge",
+ "name": "Feet-Elevated Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frog_pump",
+ "name": "Frog Pump",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Adductors"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "glute_bridge",
+ "name": "Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "glute_bridge_march",
+ "name": "Glute Bridge March",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_step_up",
+ "name": "High Step-up",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_airplane",
+ "name": "Hip Airplane",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals",
+ "Abductors"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_skater_hop",
+ "name": "Lateral Skater Hop",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Abductors",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_step_up",
+ "name": "Lateral Step-up",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Abductors",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pigeon_stretch",
+ "name": "Pigeon Stretch",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_hip_thrust",
+ "name": "Single-Leg Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "skater_jump",
+ "name": "Skater Jump",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Abductors",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sprinter_pull",
+ "name": "Sprinter Pull",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Quadriceps",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_glute_kickback",
+ "name": "Cable Glute Kickback",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_pull_through",
+ "name": "Cable Pull-Through",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Lower back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_standing_glute_pushdown",
+ "name": "Cable Standing Glute Pushdown",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_frog_pump",
+ "name": "Dumbbell Frog Pump",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_glute_bridge",
+ "name": "Dumbbell Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_hip_thrust",
+ "name": "Dumbbell Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "45_degree_back_extension",
+ "name": "45-Degree Back Extension",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Lower back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "glute_focused_back_extension",
+ "name": "Glute-Focused Back Extension",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Lower back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_hip_thrust",
+ "name": "Machine Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_hyperextension_machine",
+ "name": "Reverse Hyperextension Machine",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Lower back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "banded_glute_bridge",
+ "name": "Banded Glute Bridge",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Abductors"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_hip_thrust",
+ "name": "Smith Machine Hip Thrust",
+ "primaryMuscle": "Glutes",
+ "primaryMuscles": [
+ "Glutes"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "b_stance_romanian_deadlift",
+ "name": "B-Stance Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_romanian_deadlift",
+ "name": "Barbell Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_stiff_leg_deadlift",
+ "name": "Barbell Stiff-Leg Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "conventional_deadlift",
+ "name": "Conventional Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deadlift",
+ "name": "Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jefferson_curl",
+ "name": "Jefferson Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_grip_deadlift",
+ "name": "Snatch-Grip Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_nordic_hamstring_curl",
+ "name": "Assisted Nordic Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_good_morning",
+ "name": "Bodyweight Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hamstring_slider_curl",
+ "name": "Hamstring Slider Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hamstring_walkout",
+ "name": "Hamstring Walkout",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hip_hinge_drill",
+ "name": "Hip Hinge Drill",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "inchworm_walkout",
+ "name": "Inchworm Walkout",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_romanian_deadlift",
+ "name": "Single-Leg Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_sliding_hamstring_curl",
+ "name": "Single-Leg Sliding Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sliding_hamstring_curl",
+ "name": "Sliding Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_leg_curl",
+ "name": "Cable Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_romanian_deadlift",
+ "name": "Cable Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_cable_leg_curl",
+ "name": "Standing Cable Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "b_stance_dumbbell_romanian_deadlift",
+ "name": "B-Stance Dumbbell Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "dumbbell_good_morning",
+ "name": "Dumbbell Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_romanian_deadlift",
+ "name": "Dumbbell Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_stiff_leg_deadlift",
+ "name": "Dumbbell Stiff-Leg Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_dumbbell_romanian_deadlift",
+ "name": "Single-Leg Dumbbell Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "american_kettlebell_swing",
+ "name": "American Kettlebell Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_swing",
+ "name": "Double Kettlebell Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_romanian_deadlift",
+ "name": "Kettlebell Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_swing",
+ "name": "Kettlebell Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "russian_kettlebell_swing",
+ "name": "Russian Kettlebell Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_kettlebell_swing",
+ "name": "Single-Arm Kettlebell Swing",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_leg_curl_machine",
+ "name": "Lying Leg Curl Machine",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_leg_curl_machine",
+ "name": "Seated Leg Curl Machine",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_lying_leg_curl",
+ "name": "Single-Leg Lying Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_seated_leg_curl",
+ "name": "Single-Leg Seated Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_leg_curl_machine",
+ "name": "Standing Leg Curl Machine",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "forward_sled_drag",
+ "name": "Forward Sled Drag",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_good_morning",
+ "name": "Smith Machine Good Morning",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_romanian_deadlift",
+ "name": "Smith Machine Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "stability_ball_leg_curl",
+ "name": "Stability Ball Leg Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "swiss_ball_hamstring_curl",
+ "name": "Swiss Ball Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Stability Ball",
+ "apparatus": [
+ "Stability Ball"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trap_bar_romanian_deadlift",
+ "name": "Trap Bar Romanian Deadlift",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "RDL"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "yates_row",
+ "name": "Yates Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "active_hang",
+ "name": "Active Hang",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "advanced_tuck_front_lever_hold",
+ "name": "Advanced Tuck Front Lever Hold",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "arch_hang",
+ "name": "Arch Hang",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Forearms",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Hollow-to-Arch Hang"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "archer_pull_up",
+ "name": "Archer Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_one_arm_pull_up",
+ "name": "Assisted One-Arm Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_to_bar_pull_up",
+ "name": "Chest-to-Bar Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "climber_pull_up",
+ "name": "Climber Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "close_grip_pull_up",
+ "name": "Close-Grip Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "commando_pull_up",
+ "name": "Commando Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_lever_pull_up",
+ "name": "Front Lever Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_lever_raise",
+ "name": "Front Lever Raise",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "full_front_lever_hold",
+ "name": "Full Front Lever Hold",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_pull_up",
+ "name": "High Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ice_cream_maker",
+ "name": "Ice Cream Maker",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jumping_muscle_up",
+ "name": "Jumping Muscle-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jumping_pull_up",
+ "name": "Jumping Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "l_sit_pull_up",
+ "name": "L-Sit Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_muscle_up",
+ "name": "Negative Muscle-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_pull_up",
+ "name": "Negative Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neutral_grip_pull_up",
+ "name": "Neutral-Grip Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_pull_up",
+ "name": "One-Arm Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_muscle_up",
+ "name": "Ring Muscle-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "slow_muscle_up",
+ "name": "Slow Muscle-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straddle_front_lever_hold",
+ "name": "Straddle Front Lever Hold",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "towel_pull_up",
+ "name": "Towel Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Forearms",
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_front_lever_hold",
+ "name": "Tuck Front Lever Hold",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Middle back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "typewriter_pull_up",
+ "name": "Typewriter Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wide_grip_pull_up",
+ "name": "Wide-Grip Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_pullover",
+ "name": "Cable Pullover",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cross_body_lat_pull_around",
+ "name": "Cross-Body Lat Pull-Around",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "half_kneeling_single_arm_lat_pulldown",
+ "name": "Half-Kneeling Single-Arm Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lat_pulldown",
+ "name": "Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pulldown"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neutral_grip_lat_pulldown",
+ "name": "Neutral-Grip Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_lat_pulldown",
+ "name": "Single-Arm Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straight_arm_cable_pulldown",
+ "name": "Straight-Arm Cable Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "underhand_lat_pulldown",
+ "name": "Underhand Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bench_supported_dumbbell_row",
+ "name": "Bench-Supported Dumbbell Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_pullover",
+ "name": "Dumbbell Pullover",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_row",
+ "name": "Dumbbell Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kroc_row",
+ "name": "Kroc Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tripod_dumbbell_row",
+ "name": "Tripod Dumbbell Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_kettlebell_row",
+ "name": "Single-Arm Kettlebell Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_chin_up_machine",
+ "name": "Assisted Chin-up Machine",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_pull_up",
+ "name": "Assisted Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_strength_pulldown",
+ "name": "Hammer Strength Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_high_row",
+ "name": "Machine High Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_pullover",
+ "name": "Machine Pullover",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_high_row",
+ "name": "Plate-Loaded High Row",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_lat_pulldown",
+ "name": "Plate-Loaded Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Lat Pulldown Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pullover_machine",
+ "name": "Pullover Machine",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "close_grip_chin_up",
+ "name": "Close-Grip Chin-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_chin_up",
+ "name": "Weighted Chin-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_lat_pulldown",
+ "name": "Band Lat Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_pull_over",
+ "name": "Band Pull-Over",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_straight_arm_pulldown",
+ "name": "Band Straight-Arm Pulldown",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_assisted_chin_up",
+ "name": "Band-Assisted Chin-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Middle back"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_good_mornings",
+ "name": "Seated Good Morning",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Seated Good Mornings"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "back_extension",
+ "name": "Back Extension",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_back_extension",
+ "name": "Machine Back Extension",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "roman_chair_back_extension",
+ "name": "Roman Chair Back Extension",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_back_extension",
+ "name": "Weighted Back Extension",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_extension_isometric",
+ "name": "Neck Extension Isometric",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_flexion_isometric",
+ "name": "Neck Flexion Isometric",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_lateral_flexion_isometric",
+ "name": "Neck Lateral Flexion Isometric",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_machine_extension",
+ "name": "Neck Machine Extension",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_machine_flexion",
+ "name": "Neck Machine Flexion",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_machine_lateral_flexion",
+ "name": "Neck Machine Lateral Flexion",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_harness_extension",
+ "name": "Neck Harness Extension",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Neck Harness"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_harness_flexion",
+ "name": "Neck Harness Flexion",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Neck Harness"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lateral_neck_flexion",
+ "name": "Lateral Neck Flexion",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_extension",
+ "name": "Neck Extension",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neck_flexion",
+ "name": "Neck Flexion",
+ "primaryMuscle": "Neck",
+ "primaryMuscles": [
+ "Neck"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "air_bike",
+ "name": "Bicycle Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Air Bike",
+ "Supine Bicycle Crunch"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "hanging_windshield_wiper",
+ "name": "Hanging Windshield Wiper",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_plank_t_spine_rotation",
+ "name": "High Plank T-Spine Rotation",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "human_flag_hold",
+ "name": "Human Flag Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lying_windshield_wiper",
+ "name": "Lying Windshield Wiper",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "mountain_climber_cross_body",
+ "name": "Mountain Climber Cross-Body",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plank_knee_to_elbow",
+ "name": "Plank Knee to Elbow",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "side_plank_hip_dip",
+ "name": "Side Plank Hip Dip",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "star_side_plank",
+ "name": "Star Side Plank",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Abductors",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_human_flag_hold",
+ "name": "Tuck Human Flag Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "vertical_flag_hold",
+ "name": "Vertical Flag Hold",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "isometric",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "anderson_squat",
+ "name": "Anderson Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "back_squat",
+ "name": "Back Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_bulgarian_split_squat",
+ "name": "Barbell Bulgarian Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_reverse_lunge",
+ "name": "Barbell Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_split_squat",
+ "name": "Barbell Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "front_squat",
+ "name": "Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_bar_back_squat",
+ "name": "High-Bar Back Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_bar_back_squat",
+ "name": "Low-Bar Back Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "paused_squat",
+ "name": "Paused Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pin_squat",
+ "name": "Pin Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tempo_squat",
+ "name": "Tempo Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "zercher_squats",
+ "name": "Zercher Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Zercher Squats"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "180_squat_jump",
+ "name": "180 Squat Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_pistol_squat",
+ "name": "Assisted Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_reverse_nordic_curl",
+ "name": "Assisted Reverse Nordic Curl",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_sissy_squat",
+ "name": "Assisted Sissy Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_step_up",
+ "name": "Bodyweight Step-up",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_pistol_squat",
+ "name": "Box Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_step_down",
+ "name": "Box Step-down",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "broad_jump",
+ "name": "Broad Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cycled_split_squat_jump",
+ "name": "Cycled Split-Squat Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deep_squat_hold",
+ "name": "Deep Squat Hold",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Adductors",
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "duck_walk",
+ "name": "Duck Walk",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "forward_lunge",
+ "name": "Forward Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hindu_squat",
+ "name": "Hindu Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Calves",
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jumping_lunge",
+ "name": "Jumping Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Lunge Jump"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_pistol_squat",
+ "name": "Negative Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pistol_squat",
+ "name": "Pistol Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prisoner_squat",
+ "name": "Prisoner Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_lunge",
+ "name": "Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_lunge_jump",
+ "name": "Reverse Lunge Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_lunge_to_knee_drive",
+ "name": "Reverse Lunge to Knee Drive",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_nordic_curl",
+ "name": "Reverse Nordic Curl",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_single_leg_stand_up",
+ "name": "Seated Single-Leg Stand-up",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "shrimp_squat",
+ "name": "Shrimp Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_box_squat",
+ "name": "Single-Leg Box Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_broad_jump",
+ "name": "Single-Leg Broad Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_squat",
+ "name": "Single-Leg Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_wall_sit",
+ "name": "Single-Leg Wall Sit",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sissy_squat",
+ "name": "Sissy Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "skater_squat",
+ "name": "Skater Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_jump",
+ "name": "Squat Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "squat_sky_reach",
+ "name": "Squat Sky Reach",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "static_lunge",
+ "name": "Static Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sumo_rotational_squat",
+ "name": "Sumo Rotational Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Adductors",
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sumo_squat",
+ "name": "Sumo Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Adductors",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_jump",
+ "name": "Tuck Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "walking_lunge",
+ "name": "Walking Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_sit",
+ "name": "Wall Sit",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "squat",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_jump",
+ "name": "Box Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "duration",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "depth_jump",
+ "name": "Depth Jump",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Box/Platform",
+ "apparatus": [
+ "Box"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_belt_squat",
+ "name": "Cable Belt Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_goblet_squat",
+ "name": "Cable Goblet Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_reverse_lunge",
+ "name": "Cable Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cyclist_squat",
+ "name": "Cyclist Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_bulgarian_split_squat",
+ "name": "Dumbbell Bulgarian Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_front_squat",
+ "name": "Dumbbell Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_goblet_squat",
+ "name": "Dumbbell Goblet Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_reverse_lunge",
+ "name": "Dumbbell Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_split_squat",
+ "name": "Dumbbell Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_walking_lunge",
+ "name": "Dumbbell Walking Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "heel_elevated_goblet_squat",
+ "name": "Heel-Elevated Goblet Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_step_up",
+ "name": "Weighted Step-up",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_front_squat",
+ "name": "Double Kettlebell Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_front_squat",
+ "name": "Kettlebell Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_goblet_squat",
+ "name": "Kettlebell Goblet Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_reverse_lunge",
+ "name": "Kettlebell Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_step_up",
+ "name": "Kettlebell Step-up",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_walking_lunge",
+ "name": "Kettlebell Walking Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "duration_distance",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_hack_squat",
+ "name": "Landmine Hack Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_reverse_lunge",
+ "name": "Landmine Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_squat",
+ "name": "Landmine Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "45_degree_leg_press",
+ "name": "45-Degree Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "horizontal_leg_press",
+ "name": "Horizontal Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pendulum_squat",
+ "name": "Pendulum Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_leg_leg_press",
+ "name": "Single-Leg Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "v_squat_machine",
+ "name": "V-Squat Machine",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "vertical_leg_press",
+ "name": "Vertical Leg Press",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Leg Press Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_leg_extension",
+ "name": "Band Leg Extension",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_split_squat",
+ "name": "Band Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_squat",
+ "name": "Band Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "spanish_squat",
+ "name": "Spanish Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_bear_hug_squat",
+ "name": "Sandbag Bear-Hug Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "sandbag_front_squat",
+ "name": "Sandbag Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Sandbag",
+ "apparatus": [
+ "Sandbag"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "backward_sled_drag",
+ "name": "Backward Sled Drag",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Calves"
+ ],
+ "equipment": "Conditioning",
+ "equipmentDetail": "Sled",
+ "apparatus": [
+ "Sled"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_bulgarian_split_squat",
+ "name": "Smith Machine Bulgarian Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_front_squat",
+ "name": "Smith Machine Front Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_reverse_lunge",
+ "name": "Smith Machine Reverse Lunge",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_sissy_squat",
+ "name": "Smith Machine Sissy Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_split_squat",
+ "name": "Smith Machine Split Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Adductors"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_squat",
+ "name": "Smith Machine Squat",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Abdominals"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "squat",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prone_t_raise",
+ "name": "Prone T Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prone_w_raise",
+ "name": "Prone W Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "prone_y_raise",
+ "name": "Prone Y Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_face_pull",
+ "name": "Ring Face Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_rear_delt_row",
+ "name": "Ring Rear Delt Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_jerk",
+ "name": "Barbell Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_push_press",
+ "name": "Barbell Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "behind_the_neck_press",
+ "name": "Behind-the-Neck Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bradford_press",
+ "name": "Bradford Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_press",
+ "name": "Overhead Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Military Press",
+ "Shoulder Press"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "push_jerk",
+ "name": "Push Jerk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_barbell_overhead_press",
+ "name": "Seated Barbell Overhead Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_barbell_shoulder_press",
+ "name": "Seated Barbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "snatch_grip_behind_the_neck_press",
+ "name": "Snatch-Grip Behind-the-Neck Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Traps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "strict_press",
+ "name": "Strict Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "z_press",
+ "name": "Z Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "advanced_tuck_back_lever_hold",
+ "name": "Advanced Tuck Back Lever Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "advanced_tuck_planche_hold",
+ "name": "Advanced Tuck Planche Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "back_lever_raise",
+ "name": "Back Lever Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "box_pike_push_up",
+ "name": "Box Pike Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_to_wall_handstand_hold",
+ "name": "Chest-to-Wall Handstand Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crow_pose_hold",
+ "name": "Crow Pose Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "downward_dog",
+ "name": "Downward Dog",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Calves",
+ "Lower back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "elevated_pike_push_up",
+ "name": "Elevated Pike Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "feet_elevated_pike_push_up",
+ "name": "Feet-Elevated Pike Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "frog_stand",
+ "name": "Frog Stand",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "full_back_lever_hold",
+ "name": "Full Back Lever Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "full_planche_hold",
+ "name": "Full Planche Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "german_hang",
+ "name": "German Hang",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "handstand_hold",
+ "name": "Handstand Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "handstand_shoulder_tap",
+ "name": "Handstand Shoulder Tap",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_handstand_push_up",
+ "name": "Negative Handstand Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pike_push_up",
+ "name": "Pike Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pike Press"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "planche_lean",
+ "name": "Planche Lean",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "planche_push_up",
+ "name": "Planche Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "scapular_push_up",
+ "name": "Scapular Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "skin_the_cat",
+ "name": "Skin the Cat",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Abdominals",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straddle_back_lever_hold",
+ "name": "Straddle Back Lever Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straddle_planche_hold",
+ "name": "Straddle Planche Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_back_lever_hold",
+ "name": "Tuck Back Lever Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Lats",
+ "Abdominals",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_planche_hold",
+ "name": "Tuck Planche Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "tuck_planche_push_up",
+ "name": "Tuck Planche Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_angel",
+ "name": "Wall Angel",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_handstand_hold",
+ "name": "Wall Handstand Hold",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_handstand_push_up",
+ "name": "Wall Handstand Push-up",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_slide",
+ "name": "Wall Slide",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wall_walk",
+ "name": "Wall Walk",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Wall"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "behind_the_back_cable_lateral_raise",
+ "name": "Behind-the-Back Cable Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_external_rotation",
+ "name": "Cable External Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_face_pull",
+ "name": "Cable Face Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_front_raise",
+ "name": "Cable Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_lateral_raise",
+ "name": "Cable Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_upright_row",
+ "name": "Cable Upright Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_y_raise",
+ "name": "Cable Y Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cross_body_cable_lateral_raise",
+ "name": "Cross-Body Cable Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leaning_cable_lateral_raise",
+ "name": "Leaning Cable Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_cable_fly",
+ "name": "Reverse Cable Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_lateral_raise",
+ "name": "Single-Arm Cable Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_dumbbell_front_raise",
+ "name": "Alternating Dumbbell Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "alternating_dumbbell_shoulder_press",
+ "name": "Alternating Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "arnold_press",
+ "name": "Arnold Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bent_over_dumbbell_reverse_fly",
+ "name": "Bent-Over Dumbbell Reverse Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_supported_dumbbell_rear_delt_row",
+ "name": "Chest-Supported Dumbbell Rear Delt Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_external_rotation",
+ "name": "Dumbbell External Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_front_raise",
+ "name": "Dumbbell Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_internal_rotation",
+ "name": "Dumbbell Internal Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lateral_raise",
+ "name": "Dumbbell Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_push_press",
+ "name": "Dumbbell Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_rear_delt_fly",
+ "name": "Dumbbell Rear Delt Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_upright_row",
+ "name": "Dumbbell Upright Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_z_press",
+ "name": "Dumbbell Z Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_incline_dumbbell_press",
+ "name": "High-Incline Dumbbell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_rear_delt_fly",
+ "name": "Incline Dumbbell Rear Delt Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "leaning_dumbbell_lateral_raise",
+ "name": "Leaning Dumbbell Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "lu_raise",
+ "name": "Lu Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "monkey_row",
+ "name": "Monkey Row",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "neutral_grip_dumbbell_shoulder_press",
+ "name": "Neutral-Grip Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_carry",
+ "name": "Overhead Carry",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "powell_raise",
+ "name": "Powell Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_lateral_raise",
+ "name": "Seated Dumbbell Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_dumbbell_shoulder_press",
+ "name": "Seated Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_dumbbell_shoulder_press",
+ "name": "Single-Arm Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "standing_dumbbell_shoulder_press",
+ "name": "Standing Dumbbell Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bottoms_up_kettlebell_press",
+ "name": "Bottoms-up Kettlebell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Forearms",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_halo",
+ "name": "Kettlebell Halo",
+ "primaryMuscle": "Mobility",
+ "primaryMuscles": [
+ "Mobility"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Core",
+ "Traps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_press",
+ "name": "Kettlebell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_push_press",
+ "name": "Kettlebell Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_kettlebell_press",
+ "name": "Single-Arm Kettlebell Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "waiter_carry",
+ "name": "Waiter Carry",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Forearms"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "carry",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "half_kneeling_landmine_press",
+ "name": "Half-Kneeling Landmine Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_press",
+ "name": "Landmine Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_push_press",
+ "name": "Landmine Push Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Quadriceps",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "one_arm_landmine_press",
+ "name": "One-Arm Landmine Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Triceps",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clubbell_mill",
+ "name": "Clubbell Mill",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Core",
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Clubbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "clubbell_shield_cast",
+ "name": "Clubbell Shield Cast",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Core",
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Clubbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "steel_mace_10_to_2",
+ "name": "Steel Mace 10-to-2",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Core",
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Steel Mace"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "steel_mace_360",
+ "name": "Steel Mace 360",
+ "primaryMuscle": "Full Body",
+ "primaryMuscles": [
+ "Full Body"
+ ],
+ "secondaryMuscles": [
+ "Core",
+ "Forearms",
+ "Shoulders"
+ ],
+ "equipment": "Other",
+ "equipmentDetail": "Other",
+ "apparatus": [
+ "Steel Mace"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_rear_delt_fly",
+ "name": "Machine Rear Delt Fly",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_shoulder_press",
+ "name": "Machine Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_shoulder_press",
+ "name": "Plate-Loaded Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_front_raise",
+ "name": "Plate Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_halo",
+ "name": "Plate Halo",
+ "primaryMuscle": "Mobility",
+ "primaryMuscles": [
+ "Mobility"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Core"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Plate",
+ "apparatus": [
+ "Weight Plate"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_external_rotation",
+ "name": "Band External Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_face_pull",
+ "name": "Band Face Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_front_raise",
+ "name": "Band Front Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_internal_rotation",
+ "name": "Band Internal Rotation",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "rotation",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_lateral_raise",
+ "name": "Band Lateral Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_behind_the_neck_press",
+ "name": "Smith Machine Behind-the-Neck Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps",
+ "Traps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_shoulder_press",
+ "name": "Smith Machine Shoulder Press",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Triceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_face_pull",
+ "name": "TRX Face Pull",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_t_raise",
+ "name": "TRX T Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_y_raise",
+ "name": "TRX Y Raise",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Middle back",
+ "Traps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "arch_body_hold",
+ "name": "Arch Body Hold",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bird_dog",
+ "name": "Bird Dog",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cat_cow",
+ "name": "Cat-Cow",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "child_pose_to_cobra",
+ "name": "Child Pose to Cobra",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cobra_stretch",
+ "name": "Cobra Stretch",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "superman_hold",
+ "name": "Superman Hold",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "superman_pull",
+ "name": "Superman Pull",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Shoulders",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "upward_dog",
+ "name": "Upward Dog",
+ "primaryMuscle": "Lower back",
+ "primaryMuscles": [
+ "Lower back"
+ ],
+ "secondaryMuscles": [
+ "Chest"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "behind_the_back_barbell_shrug",
+ "name": "Behind-the-Back Barbell Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_shrugs",
+ "name": "Cable Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Cable Shrugs"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_trap_3_raise",
+ "name": "Cable Trap-3 Raise",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Middle back"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_shrug",
+ "name": "Incline Dumbbell Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Middle back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trap_3_raise",
+ "name": "Trap-3 Raise",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Middle back"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_high_pull",
+ "name": "Kettlebell High Pull",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Hamstrings",
+ "Glutes",
+ "Shoulders"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "olympic",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_shrug",
+ "name": "Smith Machine Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trap_bar_shrug",
+ "name": "Trap Bar Shrug",
+ "primaryMuscle": "Traps",
+ "primaryMuscles": [
+ "Traps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Trap Bar",
+ "apparatus": [
+ "Trap Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "isometric",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "barbell_skull_crusher",
+ "name": "Barbell Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "close_grip_bench_press",
+ "name": "Close-Grip Bench Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "close_grip_floor_press",
+ "name": "Close-Grip Floor Press",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "bodyweight_triceps_extension",
+ "name": "Bodyweight Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Bodyweight Skull Crusher"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "crab_walk",
+ "name": "Crab Walk",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "cardio",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "diamond_knee_push_up",
+ "name": "Diamond Knee Push-up",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "diamond_push_up",
+ "name": "Diamond Push-up",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dip_support_hold",
+ "name": "Dip Support Hold",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "jumping_dip",
+ "name": "Jumping Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [
+ "Jump Dip"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "korean_dip",
+ "name": "Korean Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "negative_dip",
+ "name": "Negative Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_support_hold",
+ "name": "Ring Support Hold",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Chest",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_triceps_extension",
+ "name": "Ring Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "russian_dip",
+ "name": "Russian Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straight_bar_dip",
+ "name": "Straight Bar Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "weighted_dip",
+ "name": "Weighted Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Dip Bars",
+ "apparatus": [
+ "Dip Bars"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Weighted Dips"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_katana_extension",
+ "name": "Cable Katana Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_pressdown",
+ "name": "Cable Pressdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_skull_crusher",
+ "name": "Cable Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_triceps_pushdown",
+ "name": "Cable Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "crossbody_cable_triceps_extension",
+ "name": "Crossbody Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_cable_triceps_extension",
+ "name": "Incline Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_bar_cable_triceps_extension",
+ "name": "Overhead Bar Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_cable_triceps_extension",
+ "name": "Overhead Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "overhead_rope_cable_triceps_extension",
+ "name": "Overhead Rope Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_grip_cable_pushdown",
+ "name": "Reverse-Grip Cable Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Forearms"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rope_triceps_pushdown",
+ "name": "Rope Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_pushdown",
+ "name": "Single-Arm Cable Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_overhead_cable_triceps_extension",
+ "name": "Single-Arm Overhead Cable Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "straight_bar_triceps_pushdown",
+ "name": "Straight-Bar Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "v_bar_triceps_pushdown",
+ "name": "V-Bar Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_lying_triceps_extension",
+ "name": "Dumbbell Lying Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_overhead_triceps_extension",
+ "name": "Dumbbell Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_skull_crusher",
+ "name": "Dumbbell Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "dumbbell_triceps_kickback",
+ "name": "Dumbbell Triceps Kickback",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pjr_pullover",
+ "name": "PJR Pullover",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Chest"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rolling_dumbbell_triceps_extension",
+ "name": "Rolling Dumbbell Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_dumbbell_overhead_triceps_extension",
+ "name": "Single-Arm Dumbbell Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "decline_ez_bar_skull_crusher",
+ "name": "Decline EZ-Bar Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_ez_bar_triceps_extension",
+ "name": "Incline EZ-Bar Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "EZ Bar",
+ "apparatus": [
+ "EZ Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_dip",
+ "name": "Assisted Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "assisted_dip_machine",
+ "name": "Assisted Dip Machine",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_dip",
+ "name": "Machine Dip",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_overhead_triceps_extension",
+ "name": "Machine Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_overhead_triceps_extension",
+ "name": "Band Overhead Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_triceps_kickback",
+ "name": "Band Triceps Kickback",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "hinge",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_triceps_pushdown",
+ "name": "Band Triceps Pushdown",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "smith_machine_skull_crusher",
+ "name": "Smith Machine Skull Crusher",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Shoulders"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Smith Machine",
+ "apparatus": [
+ "Smith Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_triceps_extension",
+ "name": "TRX Triceps Extension",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Abdominals",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "barbell_row",
+ "name": "Barbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "block_pull",
+ "name": "Block Pull",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Lower back",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_supported_barbell_row",
+ "name": "Chest-Supported Barbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "deficit_pendlay_row",
+ "name": "Deficit Pendlay Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Lower back"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "rack_pulls",
+ "name": "Rack Pull",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Lower back",
+ "Glutes"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Rack Pulls"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "australian_chin_up",
+ "name": "Australian Chin-up",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "australian_pull_up",
+ "name": "Australian Pull-up",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Body Row"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "quadruped_t_spine_rotation",
+ "name": "Quadruped T-Spine Rotation",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "reverse_snow_angel",
+ "name": "Reverse Snow Angel",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Lower back",
+ "Glutes"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "ring_row",
+ "name": "Ring Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "table_row",
+ "name": "Table Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Shoulders"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "thread_the_needle",
+ "name": "Thread the Needle",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "cable_row_to_neck",
+ "name": "Cable Row to Neck",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "close_grip_seated_cable_row",
+ "name": "Close-Grip Seated Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "high_cable_row",
+ "name": "High Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "low_cable_row",
+ "name": "Low Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "seated_cable_row_neutral_grip",
+ "name": "Seated Cable Row - Neutral Grip",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_cable_row",
+ "name": "Single-Arm Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "wide_grip_seated_cable_row",
+ "name": "Wide-Grip Seated Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "incline_dumbbell_row",
+ "name": "Incline Dumbbell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "renegade_row",
+ "name": "Renegade Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Dumbbell",
+ "equipmentDetail": "Dumbbell",
+ "apparatus": [
+ "Dumbbells"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "double_kettlebell_row",
+ "name": "Double Kettlebell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "gorilla_row",
+ "name": "Gorilla Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "kettlebell_row",
+ "name": "Kettlebell Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Kettlebell",
+ "equipmentDetail": "Kettlebell",
+ "apparatus": [
+ "Kettlebell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "landmine_row",
+ "name": "Landmine Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Landmine",
+ "apparatus": [
+ "Landmine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "chest_supported_t_bar_row",
+ "name": "Chest-Supported T-Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "hammer_strength_row",
+ "name": "Hammer Strength Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_low_row",
+ "name": "Machine Low Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "machine_row",
+ "name": "Machine Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_low_row",
+ "name": "Plate-Loaded Low Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "plate_loaded_row",
+ "name": "Plate-Loaded Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "t_bar_row",
+ "name": "T-Bar Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Machine",
+ "equipmentDetail": "Machine",
+ "apparatus": [
+ "Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "band_row",
+ "name": "Band Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "single_arm_band_row",
+ "name": "Single-Arm Band Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Band",
+ "equipmentDetail": "Resistance Band",
+ "apparatus": [
+ "Resistance Band"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_high_row",
+ "name": "TRX High Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Shoulders",
+ "Biceps"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "trx_row",
+ "name": "TRX Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Lats",
+ "Biceps",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Suspension/TRX",
+ "apparatus": [
+ "TRX Straps"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "longhaul_upright_row_barbell",
+ "name": "Upright Row - Barbell",
+ "primaryMuscle": "Shoulders",
+ "primaryMuscles": [
+ "Shoulders"
+ ],
+ "secondaryMuscles": [
+ "Traps",
+ "Biceps",
+ "Forearms"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Barbell Upright Row",
+ "Upright Row"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "source_exrx"
+ ]
+ }
+ ],
+ "idMigrationMap": {
+ "34_situp": "34_situp",
+ "ab_crunch_machine": "ab_crunch_machine",
+ "ab_roller": "ab_roller",
+ "advanced_kettlebell_windmill": "advanced_kettlebell_windmill",
+ "air_bike": "air_bike",
+ "alternate_heel_touchers": "alternate_heel_touchers",
+ "barbell_ab_rollout": "barbell_ab_rollout",
+ "barbell_ab_rollout__on_knees": "barbell_ab_rollout__on_knees",
+ "barbell_rollout_from_bench": "barbell_rollout_from_bench",
+ "barbell_side_bend": "barbell_side_bend",
+ "bent_press": "bent_press",
+ "bentknee_hip_raise": "bentknee_hip_raise",
+ "bosu_ball_cable_crunch_with_side_bends": "bosu_ball_cable_crunch_with_side_bends",
+ "bottoms_up": "bottoms_up",
+ "buttups": "buttups",
+ "cable_crunch": "cable_crunch",
+ "cable_judo_flip": "cable_judo_flip",
+ "cable_reverse_crunch": "cable_reverse_crunch",
+ "cable_russian_twists": "cable_russian_twists",
+ "cable_seated_crunch": "cable_seated_crunch",
+ "cocoons": "cocoons",
+ "crossbody_crunch": "crossbody_crunch",
+ "crunch__hands_overhead": "crunch__hands_overhead",
+ "crunch__legs_on_exercise_ball": "crunch__legs_on_exercise_ball",
+ "crunches": "crunches",
+ "dead_bug": "dead_bug",
+ "decline_crunch": "decline_crunch",
+ "decline_oblique_crunch": "decline_oblique_crunch",
+ "decline_reverse_crunch": "decline_reverse_crunch",
+ "double_kettlebell_windmill": "double_kettlebell_windmill",
+ "dumbbell_side_bend": "dumbbell_side_bend",
+ "elbow_to_knee": "elbow_to_knee",
+ "exercise_ball_crunch": "exercise_ball_crunch",
+ "exercise_ball_pullin": "exercise_ball_pullin",
+ "flat_bench_leg_pullin": "flat_bench_leg_pullin",
+ "flat_bench_lying_leg_raise": "flat_bench_lying_leg_raise",
+ "frog_situps": "frog_situps",
+ "gorilla_chincrunch": "gorilla_chincrunch",
+ "hanging_leg_raise": "hanging_leg_raise",
+ "hanging_pike": "hanging_pike",
+ "jackknife_situp": "jackknife_situp",
+ "janda_situp": "janda_situp",
+ "kettlebell_figure_8": "kettlebell_figure_8",
+ "kettlebell_pass_between_the_legs": "kettlebell_pass_between_the_legs",
+ "kettlebell_windmill": "kettlebell_windmill",
+ "kneehip_raise_on_parallel_bars": "kneehip_raise_on_parallel_bars",
+ "kneeling_cable_crunch_with_alternating_oblique_twists": "kneeling_cable_crunch_with_alternating_oblique_twists",
+ "landmine_180s": "landmine_180s",
+ "leg_pullin": "leg_pullin",
+ "lower_back_curl": "lower_back_curl",
+ "medicine_ball_full_twist": "medicine_ball_full_twist",
+ "oblique_crunches": "oblique_crunches",
+ "oblique_crunches__on_the_floor": "oblique_crunches__on_the_floor",
+ "onearm_highpulley_cable_side_bends": "onearm_highpulley_cable_side_bends",
+ "onearm_medicine_ball_slam": "onearm_medicine_ball_slam",
+ "otisup": "otisup",
+ "overhead_stretch": "overhead_stretch",
+ "pallof_press": "pallof_press",
+ "pallof_press_with_rotation": "pallof_press_with_rotation",
+ "plank": "plank",
+ "plate_twist": "plate_twist",
+ "press_situp": "press_situp",
+ "reverse_crunch": "reverse_crunch",
+ "rope_crunch": "rope_crunch",
+ "russian_twist": "russian_twist",
+ "scissor_kick": "scissor_kick",
+ "seated_barbell_twist": "seated_barbell_twist",
+ "seated_flat_bench_leg_pullin": "seated_flat_bench_leg_pullin",
+ "seated_leg_tucks": "seated_leg_tucks",
+ "seated_overhead_stretch": "seated_overhead_stretch",
+ "side_bridge": "side_bridge",
+ "side_jackknife": "side_jackknife",
+ "situp": "situp",
+ "sledgehammer_swings": "sledgehammer_swings",
+ "smith_machine_hip_raise": "smith_machine_hip_raise",
+ "spell_caster": "spell_caster",
+ "spider_crawl": "spider_crawl",
+ "standing_cable_lift": "standing_cable_lift",
+ "standing_cable_wood_chop": "standing_cable_wood_chop",
+ "standing_lateral_stretch": "standing_lateral_stretch",
+ "standing_rope_crunch": "standing_rope_crunch",
+ "stomach_vacuum": "stomach_vacuum",
+ "supine_onearm_overhead_throw": "supine_onearm_overhead_throw",
+ "supine_twoarm_overhead_throw": "supine_twoarm_overhead_throw",
+ "suspended_fallout": "suspended_fallout",
+ "suspended_reverse_crunch": "suspended_reverse_crunch",
+ "toe_touchers": "toe_touchers",
+ "torso_rotation": "torso_rotation",
+ "tuck_crunch": "tuck_crunch",
+ "weighted_ball_side_bend": "weighted_ball_side_bend",
+ "weighted_crunches": "weighted_crunches",
+ "weighted_situps__with_bands": "weighted_situps__with_bands",
+ "wind_sprints": "wind_sprints",
+ "hip_circles_prone": "hip_circles_prone",
+ "it_band_and_glute_stretch": "it_band_and_glute_stretch",
+ "iliotibial_tractsmr": "iliotibial_tractsmr",
+ "lying_crossover": "lying_crossover",
+ "monster_walk": "monster_walk",
+ "standing_hip_circles": "standing_hip_circles",
+ "thigh_abductor": "thigh_abductor",
+ "windmills": "windmills",
+ "adductor": "adductor",
+ "adductorgroin": "adductorgroin",
+ "band_hip_adductions": "band_hip_adductions",
+ "carioca_quick_step": "carioca_quick_step",
+ "groin_and_back_stretch": "groin_and_back_stretch",
+ "groiners": "groiners",
+ "lateral_bound": "lateral_bound",
+ "lateral_box_jump": "lateral_box_jump",
+ "lateral_cone_hops": "lateral_cone_hops",
+ "lying_bent_leg_groin": "lying_bent_leg_groin",
+ "side_leg_raises": "side_leg_raises",
+ "side_lying_groin_stretch": "side_lying_groin_stretch",
+ "thigh_adductor": "thigh_adductor",
+ "alternate_hammer_curl": "alternate_hammer_curl",
+ "alternate_incline_dumbbell_curl": "alternate_incline_dumbbell_curl",
+ "barbell_curl": "barbell_curl",
+ "barbell_curls_lying_against_an_incline": "barbell_curls_lying_against_an_incline",
+ "brachialissmr": "brachialissmr",
+ "cable_hammer_curls__rope_attachment": "cable_hammer_curls__rope_attachment",
+ "cable_preacher_curl": "cable_preacher_curl",
+ "closegrip_ez_bar_curl": "closegrip_ez_bar_curl",
+ "closegrip_ezbar_curl_with_band": "closegrip_ezbar_curl_with_band",
+ "closegrip_standing_barbell_curl": "closegrip_standing_barbell_curl",
+ "concentration_curls": "concentration_curls",
+ "cross_body_hammer_curl": "cross_body_hammer_curl",
+ "drag_curl": "drag_curl",
+ "dumbbell_alternate_bicep_curl": "dumbbell_alternate_bicep_curl",
+ "dumbbell_bicep_curl": "dumbbell_bicep_curl",
+ "dumbbell_prone_incline_curl": "dumbbell_prone_incline_curl",
+ "ezbar_curl": "ezbar_curl",
+ "flexor_incline_dumbbell_curls": "flexor_incline_dumbbell_curls",
+ "hammer_curls": "hammer_curls",
+ "high_cable_curls": "high_cable_curls",
+ "incline_dumbbell_curl": "incline_dumbbell_curl",
+ "incline_hammer_curls": "incline_hammer_curls",
+ "incline_inner_biceps_curl": "incline_inner_biceps_curl",
+ "lying_cable_curl": "lying_cable_curl",
+ "lying_closegrip_bar_curl_on_high_pulley": "lying_closegrip_bar_curl_on_high_pulley",
+ "lying_high_bench_barbell_curl": "lying_high_bench_barbell_curl",
+ "lying_supine_dumbbell_curl": "lying_supine_dumbbell_curl",
+ "machine_bicep_curl": "machine_bicep_curl",
+ "machine_preacher_curls": "machine_preacher_curls",
+ "one_arm_dumbbell_preacher_curl": "one_arm_dumbbell_preacher_curl",
+ "overhead_cable_curl": "overhead_cable_curl",
+ "preacher_curl": "preacher_curl",
+ "preacher_hammer_dumbbell_curl": "preacher_hammer_dumbbell_curl",
+ "reverse_barbell_curl": "reverse_barbell_curl",
+ "reverse_barbell_preacher_curls": "reverse_barbell_preacher_curls",
+ "reverse_cable_curl": "reverse_cable_curl",
+ "reverse_plate_curls": "reverse_plate_curls",
+ "seated_biceps": "seated_biceps",
+ "seated_closegrip_concentration_barbell_curl": "seated_closegrip_concentration_barbell_curl",
+ "seated_dumbbell_curl": "seated_dumbbell_curl",
+ "seated_dumbbell_inner_biceps_curl": "seated_dumbbell_inner_biceps_curl",
+ "spider_curl": "spider_curl",
+ "standing_biceps_cable_curl": "standing_biceps_cable_curl",
+ "standing_biceps_stretch": "standing_biceps_stretch",
+ "standing_concentration_curl": "standing_concentration_curl",
+ "standing_dumbbell_reverse_curl": "standing_dumbbell_reverse_curl",
+ "standing_innerbiceps_curl": "standing_innerbiceps_curl",
+ "standing_onearm_cable_curl": "standing_onearm_cable_curl",
+ "standing_onearm_dumbbell_curl_over_incline_bench": "standing_onearm_dumbbell_curl_over_incline_bench",
+ "twoarm_dumbbell_preacher_curl": "twoarm_dumbbell_preacher_curl",
+ "widegrip_standing_barbell_curl": "widegrip_standing_barbell_curl",
+ "zottman_curl": "zottman_curl",
+ "zottman_preacher_curl": "zottman_preacher_curl",
+ "ankle_circles": "ankle_circles",
+ "anterior_tibialissmr": "anterior_tibialissmr",
+ "balance_board": "balance_board",
+ "barbell_seated_calf_raise": "barbell_seated_calf_raise",
+ "calf_press": "calf_press",
+ "calf_press_on_the_leg_press_machine": "calf_press_on_the_leg_press_machine",
+ "calf_raise_on_a_dumbbell": "calf_raise_on_a_dumbbell",
+ "calf_raises__with_bands": "calf_raises__with_bands",
+ "calf_stretch_elbows_against_wall": "calf_stretch_elbows_against_wall",
+ "calf_stretch_hands_against_wall": "calf_stretch_hands_against_wall",
+ "calvessmr": "calvessmr",
+ "donkey_calf_raises": "donkey_calf_raises",
+ "dumbbell_seated_oneleg_calf_raise": "dumbbell_seated_oneleg_calf_raise",
+ "footsmr": "footsmr",
+ "knee_circles": "knee_circles",
+ "peroneals_stretch": "peroneals_stretch",
+ "peronealssmr": "peronealssmr",
+ "posterior_tibialis_stretch": "posterior_tibialis_stretch",
+ "rocking_standing_calf_raise": "rocking_standing_calf_raise",
+ "seated_calf_raise": "seated_calf_raise",
+ "seated_calf_stretch": "seated_calf_stretch",
+ "smith_machine_calf_raise": "smith_machine_calf_raise",
+ "smith_machine_reverse_calf_raises": "smith_machine_reverse_calf_raises",
+ "standing_barbell_calf_raise": "standing_barbell_calf_raise",
+ "standing_calf_raises": "standing_calf_raises",
+ "standing_dumbbell_calf_raise": "standing_dumbbell_calf_raise",
+ "standing_gastrocnemius_calf_stretch": "standing_gastrocnemius_calf_stretch",
+ "standing_soleus_and_achilles_stretch": "standing_soleus_and_achilles_stretch",
+ "alternating_floor_press": "alternating_floor_press",
+ "around_the_worlds": "around_the_worlds",
+ "barbell_bench_press__medium_grip": "barbell_bench_press__medium_grip",
+ "barbell_guillotine_bench_press": "barbell_guillotine_bench_press",
+ "barbell_incline_bench_press__medium_grip": "barbell_incline_bench_press__medium_grip",
+ "behind_head_chest_stretch": "behind_head_chest_stretch",
+ "bench_press__with_bands": "bench_press__with_bands",
+ "bentarm_dumbbell_pullover": "bentarm_dumbbell_pullover",
+ "bodyweight_flyes": "bodyweight_flyes",
+ "butterfly": "butterfly",
+ "cable_chest_press": "cable_chest_press",
+ "cable_crossover": "cable_crossover",
+ "cable_iron_cross": "cable_iron_cross",
+ "chain_press": "chain_press",
+ "chest_and_front_of_shoulder_stretch": "chest_and_front_of_shoulder_stretch",
+ "chest_push_multiple_response": "chest_push_multiple_response",
+ "chest_push_single_response": "chest_push_single_response",
+ "chest_push_from_3_point_stance": "chest_push_from_3_point_stance",
+ "chest_push_with_run_release": "chest_push_with_run_release",
+ "chest_stretch_on_stability_ball": "chest_stretch_on_stability_ball",
+ "clock_pushup": "clock_pushup",
+ "cross_over__with_bands": "cross_over__with_bands",
+ "decline_barbell_bench_press": "decline_barbell_bench_press",
+ "decline_dumbbell_bench_press": "decline_dumbbell_bench_press",
+ "decline_dumbbell_flyes": "decline_dumbbell_flyes",
+ "decline_pushup": "decline_pushup",
+ "decline_smith_press": "decline_smith_press",
+ "dips__chest_version": "dips__chest_version",
+ "drop_push": "drop_push",
+ "dumbbell_bench_press": "dumbbell_bench_press",
+ "dumbbell_bench_press_with_neutral_grip": "dumbbell_bench_press_with_neutral_grip",
+ "dumbbell_flyes": "dumbbell_flyes",
+ "dynamic_chest_stretch": "dynamic_chest_stretch",
+ "elbows_back": "elbows_back",
+ "extended_range_onearm_kettlebell_floor_press": "extended_range_onearm_kettlebell_floor_press",
+ "flat_bench_cable_flyes": "flat_bench_cable_flyes",
+ "forward_drag_with_press": "forward_drag_with_press",
+ "front_raise_and_pullover": "front_raise_and_pullover",
+ "hammer_grip_incline_db_bench_press": "hammer_grip_incline_db_bench_press",
+ "heavy_bag_thrust": "heavy_bag_thrust",
+ "incline_cable_chest_press": "incline_cable_chest_press",
+ "incline_cable_flye": "incline_cable_flye",
+ "incline_dumbbell_bench_with_palms_facing_in": "incline_dumbbell_bench_with_palms_facing_in",
+ "incline_dumbbell_flyes": "incline_dumbbell_flyes",
+ "incline_dumbbell_flyes__with_a_twist": "incline_dumbbell_flyes__with_a_twist",
+ "incline_dumbbell_press": "incline_dumbbell_press",
+ "incline_pushup": "incline_pushup",
+ "incline_pushup_depth_jump": "incline_pushup_depth_jump",
+ "incline_pushup_medium": "incline_pushup_medium",
+ "incline_pushup_reverse_grip": "incline_pushup_reverse_grip",
+ "incline_pushup_wide": "incline_pushup_wide",
+ "isometric_chest_squeezes": "isometric_chest_squeezes",
+ "isometric_wipers": "isometric_wipers",
+ "legover_floor_press": "legover_floor_press",
+ "leverage_chest_press": "leverage_chest_press",
+ "leverage_decline_chest_press": "leverage_decline_chest_press",
+ "leverage_incline_chest_press": "leverage_incline_chest_press",
+ "low_cable_crossover": "low_cable_crossover",
+ "machine_bench_press": "machine_bench_press",
+ "medicine_ball_chest_pass": "medicine_ball_chest_pass",
+ "neck_press": "neck_press",
+ "one_arm_dumbbell_bench_press": "one_arm_dumbbell_bench_press",
+ "onearm_flat_bench_dumbbell_flye": "onearm_flat_bench_dumbbell_flye",
+ "onearm_kettlebell_floor_press": "onearm_kettlebell_floor_press",
+ "plyo_kettlebell_pushups": "plyo_kettlebell_pushups",
+ "plyo_pushup": "plyo_pushup",
+ "push_up_to_side_plank": "push_up_to_side_plank",
+ "pushup_wide": "pushup_wide",
+ "pushups_with_feet_elevated": "pushups_with_feet_elevated",
+ "pushups_with_feet_on_an_exercise_ball": "pushups_with_feet_on_an_exercise_ball",
+ "pushups": "pushups",
+ "pushups_close_and_wide_hand_positions": "pushups_close_and_wide_hand_positions",
+ "singlearm_cable_crossover": "singlearm_cable_crossover",
+ "singlearm_pushup": "singlearm_pushup",
+ "smith_machine_bench_press": "smith_machine_bench_press",
+ "smith_machine_decline_press": "smith_machine_decline_press",
+ "smith_machine_incline_bench_press": "longhaul_incline_bench_press_smith_machine",
+ "standing_cable_chest_press": "standing_cable_chest_press",
+ "straightarm_dumbbell_pullover": "straightarm_dumbbell_pullover",
+ "suspended_pushup": "suspended_pushup",
+ "svend_press": "svend_press",
+ "widegrip_barbell_bench_press": "widegrip_barbell_bench_press",
+ "widegrip_decline_barbell_bench_press": "widegrip_decline_barbell_bench_press",
+ "widegrip_decline_barbell_pullover": "widegrip_decline_barbell_pullover",
+ "bottomsup_clean_from_the_hang_position": "bottomsup_clean_from_the_hang_position",
+ "cable_wrist_curl": "cable_wrist_curl",
+ "dumbbell_lying_pronation": "dumbbell_lying_pronation",
+ "dumbbell_lying_supination": "dumbbell_lying_supination",
+ "farmers_walk": "farmers_walk",
+ "finger_curls": "finger_curls",
+ "kneeling_forearm_stretch": "kneeling_forearm_stretch",
+ "palmsdown_dumbbell_wrist_curl_over_a_bench": "palmsdown_dumbbell_wrist_curl_over_a_bench",
+ "palmsdown_wrist_curl_over_a_bench": "palmsdown_wrist_curl_over_a_bench",
+ "palmsup_barbell_wrist_curl_over_a_bench": "palmsup_barbell_wrist_curl_over_a_bench",
+ "palmsup_dumbbell_wrist_curl_over_a_bench": "palmsup_dumbbell_wrist_curl_over_a_bench",
+ "plate_pinch": "plate_pinch",
+ "rickshaw_carry": "rickshaw_carry",
+ "seated_dumbbell_palmsdown_wrist_curl": "seated_dumbbell_palmsdown_wrist_curl",
+ "seated_dumbbell_palmsup_wrist_curl": "seated_dumbbell_palmsup_wrist_curl",
+ "seated_onearm_dumbbell_palmsdown_wrist_curl": "seated_onearm_dumbbell_palmsdown_wrist_curl",
+ "seated_onearm_dumbbell_palmsup_wrist_curl": "seated_onearm_dumbbell_palmsup_wrist_curl",
+ "seated_palmup_barbell_wrist_curl": "seated_palmup_barbell_wrist_curl",
+ "seated_palmsdown_barbell_wrist_curl": "seated_palmsdown_barbell_wrist_curl",
+ "seated_twoarm_palmsup_lowpulley_wrist_curl": "seated_twoarm_palmsup_lowpulley_wrist_curl",
+ "standing_olympic_plate_hand_squeeze": "standing_olympic_plate_hand_squeeze",
+ "standing_palmsup_barbell_behind_the_back_wrist_curl": "standing_palmsup_barbell_behind_the_back_wrist_curl",
+ "wrist_circles": "wrist_circles",
+ "wrist_roller": "wrist_roller",
+ "wrist_rotations_with_straight_bar": "wrist_rotations_with_straight_bar",
+ "ankle_on_the_knee": "ankle_on_the_knee",
+ "barbell_glute_bridge": "barbell_glute_bridge",
+ "barbell_hip_thrust": "barbell_hip_thrust",
+ "butt_lift_bridge": "butt_lift_bridge",
+ "downward_facing_balance": "downward_facing_balance",
+ "flutter_kicks": "flutter_kicks",
+ "glute_kickback": "glute_kickback",
+ "hip_extension_with_bands": "hip_extension_with_bands",
+ "hip_lift_with_band": "hip_lift_with_band",
+ "knee_across_the_body": "knee_across_the_body",
+ "kneeling_jump_squat": "kneeling_jump_squat",
+ "kneeling_squat": "kneeling_squat",
+ "leg_lift": "leg_lift",
+ "lying_glute": "lying_glute",
+ "one_knee_to_chest": "one_knee_to_chest",
+ "onelegged_cable_kickback": "onelegged_cable_kickback",
+ "physioball_hip_bridge": "physioball_hip_bridge",
+ "piriformissmr": "piriformissmr",
+ "pull_through": "pull_through",
+ "seated_glute": "seated_glute",
+ "single_leg_glute_bridge": "single_leg_glute_bridge",
+ "stepup_with_knee_raise": "stepup_with_knee_raise",
+ "9090_hamstring": "9090_hamstring",
+ "alternating_hang_clean": "alternating_hang_clean",
+ "ball_leg_curl": "ball_leg_curl",
+ "band_good_morning": "band_good_morning",
+ "band_good_morning_pull_through": "band_good_morning_pull_through",
+ "box_jump_multiple_response": "box_jump_multiple_response",
+ "box_skip": "box_skip",
+ "chair_leg_extended_stretch": "chair_leg_extended_stretch",
+ "clean": "clean",
+ "clean_deadlift": "clean_deadlift",
+ "double_kettlebell_alternating_hang_clean": "double_kettlebell_alternating_hang_clean",
+ "dumbbell_clean": "dumbbell_clean",
+ "floor_gluteham_raise": "floor_gluteham_raise",
+ "front_box_jump": "front_box_jump",
+ "front_leg_raises": "front_leg_raises",
+ "glute_ham_raise": "glute_ham_raise",
+ "good_morning": "good_morning",
+ "good_morning_off_pins": "good_morning_off_pins",
+ "hamstring_stretch": "hamstring_stretch",
+ "hamstringsmr": "hamstringsmr",
+ "hang_snatch": "hang_snatch",
+ "hang_snatch__below_knees": "hang_snatch__below_knees",
+ "hanging_bar_good_morning": "hanging_bar_good_morning",
+ "hurdle_hops": "hurdle_hops",
+ "inchworm": "inchworm",
+ "intermediate_groin_stretch": "intermediate_groin_stretch",
+ "kettlebell_dead_clean": "kettlebell_dead_clean",
+ "kettlebell_hang_clean": "kettlebell_hang_clean",
+ "kettlebell_onelegged_deadlift": "kettlebell_onelegged_deadlift",
+ "knee_tuck_jump": "knee_tuck_jump",
+ "legup_hamstring_stretch": "legup_hamstring_stretch",
+ "linear_3part_start_technique": "linear_3part_start_technique",
+ "linear_acceleration_wall_drill": "linear_acceleration_wall_drill",
+ "lunge_pass_through": "lunge_pass_through",
+ "lying_hamstring": "lying_hamstring",
+ "lying_leg_curls": "lying_leg_curls",
+ "moving_claw_series": "moving_claw_series",
+ "muscle_snatch": "muscle_snatch",
+ "natural_glute_ham_raise": "natural_glute_ham_raise",
+ "onearm_kettlebell_clean": "onearm_kettlebell_clean",
+ "onearm_kettlebell_swings": "onearm_kettlebell_swings",
+ "onearm_open_palm_kettlebell_clean": "onearm_open_palm_kettlebell_clean",
+ "open_palm_kettlebell_clean": "open_palm_kettlebell_clean",
+ "platform_hamstring_slides": "platform_hamstring_slides",
+ "power_clean": "power_clean",
+ "power_clean_from_blocks": "power_clean_from_blocks",
+ "power_snatch": "power_snatch",
+ "power_stairs": "power_stairs",
+ "prone_manual_hamstring": "prone_manual_hamstring",
+ "prowler_sprint": "prowler_sprint",
+ "reverse_band_sumo_deadlift": "reverse_band_sumo_deadlift",
+ "reverse_hyperextension": "reverse_hyperextension",
+ "romanian_deadlift": "romanian_deadlift",
+ "romanian_deadlift_from_deficit": "romanian_deadlift_from_deficit",
+ "runners_stretch": "runners_stretch",
+ "seated_band_hamstring_curl": "seated_band_hamstring_curl",
+ "seated_floor_hamstring_stretch": "seated_floor_hamstring_stretch",
+ "seated_hamstring": "seated_hamstring",
+ "seated_hamstring_and_calf_stretch": "seated_hamstring_and_calf_stretch",
+ "seated_leg_curl": "seated_leg_curl",
+ "smith_machine_hang_power_clean": "smith_machine_hang_power_clean",
+ "smith_machine_stifflegged_deadlift": "smith_machine_stifflegged_deadlift",
+ "snatch_deadlift": "snatch_deadlift",
+ "snatch_pull": "snatch_pull",
+ "split_snatch": "split_snatch",
+ "split_squats": "split_squats",
+ "standing_hamstring_and_calf_stretch": "standing_hamstring_and_calf_stretch",
+ "standing_leg_curl": "standing_leg_curl",
+ "standing_toe_touches": "standing_toe_touches",
+ "stifflegged_barbell_deadlift": "stifflegged_barbell_deadlift",
+ "stifflegged_dumbbell_deadlift": "stifflegged_dumbbell_deadlift",
+ "sumo_deadlift": "sumo_deadlift",
+ "sumo_deadlift_with_bands": "sumo_deadlift_with_bands",
+ "sumo_deadlift_with_chains": "sumo_deadlift_with_chains",
+ "the_straddle": "the_straddle",
+ "upper_backleg_grab": "upper_backleg_grab",
+ "vertical_swing": "vertical_swing",
+ "wide_stance_stiff_legs": "wide_stance_stiff_legs",
+ "worlds_greatest_stretch": "worlds_greatest_stretch",
+ "band_assisted_pullup": "band_assisted_pullup",
+ "bentarm_barbell_pullover": "bentarm_barbell_pullover",
+ "cable_incline_pushdown": "cable_incline_pushdown",
+ "catch_and_overhead_throw": "catch_and_overhead_throw",
+ "chair_lower_back_stretch": "chair_lower_back_stretch",
+ "chinup": "chinup",
+ "closegrip_front_lat_pulldown": "closegrip_front_lat_pulldown",
+ "dynamic_back_stretch": "dynamic_back_stretch",
+ "elevated_cable_rows": "elevated_cable_rows",
+ "full_rangeofmotion_lat_pulldown": "full_rangeofmotion_lat_pulldown",
+ "gironda_sternum_chins": "gironda_sternum_chins",
+ "kipping_muscle_up": "kipping_muscle_up",
+ "kneeling_high_pulley_row": "kneeling_high_pulley_row",
+ "kneeling_singlearm_high_pulley_row": "kneeling_singlearm_high_pulley_row",
+ "latissimus_dorsismr": "latissimus_dorsismr",
+ "leverage_iso_row": "leverage_iso_row",
+ "london_bridges": "london_bridges",
+ "muscle_up": "muscle_up",
+ "one_arm_against_wall": "one_arm_against_wall",
+ "one_arm_lat_pulldown": "one_arm_lat_pulldown",
+ "one_handed_hang": "one_handed_hang",
+ "overhead_lat": "overhead_lat",
+ "overhead_slam": "overhead_slam",
+ "pullups": "pullups",
+ "rocky_pullupspulldowns": "rocky_pullupspulldowns",
+ "rope_climb": "rope_climb",
+ "rope_straightarm_pulldown": "rope_straightarm_pulldown",
+ "shotgun_row": "shotgun_row",
+ "side_to_side_chins": "side_to_side_chins",
+ "sidelying_floor_stretch": "sidelying_floor_stretch",
+ "straightarm_pulldown": "straightarm_pulldown",
+ "underhand_cable_pulldowns": "underhand_cable_pulldowns",
+ "vbar_pulldown": "vbar_pulldown",
+ "vbar_pullup": "vbar_pullup",
+ "weighted_pull_ups": "weighted_pull_ups",
+ "widegrip_lat_pulldown": "widegrip_lat_pulldown",
+ "widegrip_pulldown_behind_the_neck": "widegrip_pulldown_behind_the_neck",
+ "widegrip_rear_pullup": "widegrip_rear_pullup",
+ "atlas_stone_trainer": "atlas_stone_trainer",
+ "atlas_stones": "atlas_stones",
+ "axle_deadlift": "axle_deadlift",
+ "barbell_deadlift": "barbell_deadlift",
+ "cat_stretch": "cat_stretch",
+ "childs_pose": "childs_pose",
+ "crossover_reverse_lunge": "crossover_reverse_lunge",
+ "dancers_stretch": "dancers_stretch",
+ "deadlift_with_bands": "deadlift_with_bands",
+ "deadlift_with_chains": "deadlift_with_chains",
+ "deficit_deadlift": "deficit_deadlift",
+ "hug_a_ball": "hug_a_ball",
+ "hug_knees_to_chest": "hug_knees_to_chest",
+ "hyperextensions_back_extensions": "hyperextensions_back_extensions",
+ "hyperextensions_with_no_hyperextension_bench": "hyperextensions_with_no_hyperextension_bench",
+ "keg_load": "keg_load",
+ "lower_backsmr": "lower_backsmr",
+ "pelvic_tilt_into_bridge": "pelvic_tilt_into_bridge",
+ "pyramid": "pyramid",
+ "rack_pull_with_bands": "rack_pull_with_bands",
+ "rack_pulls": "rack_pulls",
+ "reverse_band_deadlift": "reverse_band_deadlift",
+ "seated_good_mornings": "seated_good_mornings",
+ "standing_pelvic_tilt": "standing_pelvic_tilt",
+ "stiff_leg_barbell_good_morning": "stiff_leg_barbell_good_morning",
+ "superman": "superman",
+ "weighted_ball_hyperextension": "weighted_ball_hyperextension",
+ "alternating_kettlebell_row": "alternating_kettlebell_row",
+ "alternating_renegade_row": "alternating_renegade_row",
+ "bent_over_barbell_row": "bent_over_barbell_row",
+ "bent_over_onearm_long_bar_row": "bent_over_onearm_long_bar_row",
+ "bent_over_twoarm_long_bar_row": "bent_over_twoarm_long_bar_row",
+ "bent_over_twodumbbell_row": "bent_over_twodumbbell_row",
+ "bent_over_twodumbbell_row_with_palms_in": "bent_over_twodumbbell_row_with_palms_in",
+ "bodyweight_mid_row": "bodyweight_mid_row",
+ "dumbbell_incline_row": "dumbbell_incline_row",
+ "incline_bench_pull": "incline_bench_pull",
+ "inverted_row": "inverted_row",
+ "inverted_row_with_straps": "inverted_row_with_straps",
+ "leverage_high_row": "leverage_high_row",
+ "lying_cambered_barbell_row": "lying_cambered_barbell_row",
+ "lying_tbar_row": "lying_tbar_row",
+ "middle_back_shrug": "middle_back_shrug",
+ "middle_back_stretch": "middle_back_stretch",
+ "mixed_grip_chin": "mixed_grip_chin",
+ "one_arm_chinup": "one_arm_chinup",
+ "onearm_dumbbell_row": "onearm_dumbbell_row",
+ "onearm_kettlebell_row": "onearm_kettlebell_row",
+ "onearm_long_bar_row": "onearm_long_bar_row",
+ "reverse_grip_bentover_rows": "reverse_grip_bentover_rows",
+ "rhomboidssmr": "rhomboidssmr",
+ "seated_cable_rows": "seated_cable_rows",
+ "seated_onearm_cable_pulley_rows": "seated_onearm_cable_pulley_rows",
+ "sled_row": "sled_row",
+ "smith_machine_bent_over_row": "smith_machine_bent_over_row",
+ "spinal_stretch": "spinal_stretch",
+ "straight_bar_bench_mid_rows": "straight_bar_bench_mid_rows",
+ "suspended_row": "suspended_row",
+ "tbar_row_with_handle": "tbar_row_with_handle",
+ "twoarm_kettlebell_row": "twoarm_kettlebell_row",
+ "upper_back_stretch": "upper_back_stretch",
+ "chin_to_chest_stretch": "chin_to_chest_stretch",
+ "isometric_neck_exercise__front_and_back": "isometric_neck_exercise__front_and_back",
+ "isometric_neck_exercise__sides": "isometric_neck_exercise__sides",
+ "lying_face_down_plate_neck_resistance": "lying_face_down_plate_neck_resistance",
+ "lying_face_up_plate_neck_resistance": "lying_face_up_plate_neck_resistance",
+ "necksmr": "necksmr",
+ "seated_head_harness_neck_resistance": "seated_head_harness_neck_resistance",
+ "side_neck_stretch": "side_neck_stretch",
+ "all_fours_quad_stretch": "all_fours_quad_stretch",
+ "alternate_leg_diagonal_bound": "alternate_leg_diagonal_bound",
+ "backward_drag": "backward_drag",
+ "barbell_full_squat": "barbell_full_squat",
+ "barbell_hack_squat": "longhaul_hack_squat_barbell",
+ "barbell_lunge": "barbell_lunge",
+ "barbell_side_split_squat": "barbell_side_split_squat",
+ "barbell_squat": "barbell_squat",
+ "barbell_squat_to_a_bench": "barbell_squat_to_a_bench",
+ "barbell_step_ups": "barbell_step_ups",
+ "barbell_walking_lunge": "barbell_walking_lunge",
+ "bear_crawl_sled_drags": "bear_crawl_sled_drags",
+ "bench_jump": "bench_jump",
+ "bench_sprint": "bench_sprint",
+ "bicycling": "bicycling",
+ "bicycling_stationary": "bicycling_stationary",
+ "bodyweight_squat": "bodyweight_squat",
+ "bodyweight_walking_lunge": "bodyweight_walking_lunge",
+ "box_squat": "box_squat",
+ "box_squat_with_bands": "box_squat_with_bands",
+ "box_squat_with_chains": "box_squat_with_chains",
+ "cable_deadlifts": "cable_deadlifts",
+ "cable_hip_adduction": "cable_hip_adduction",
+ "car_deadlift": "car_deadlift",
+ "chair_squat": "chair_squat",
+ "clean_pull": "clean_pull",
+ "clean_from_blocks": "clean_from_blocks",
+ "conans_wheel": "conans_wheel",
+ "depth_jump_leap": "depth_jump_leap",
+ "double_leg_butt_kick": "double_leg_butt_kick",
+ "dumbbell_lunges": "dumbbell_lunges",
+ "dumbbell_rear_lunge": "dumbbell_rear_lunge",
+ "dumbbell_seated_box_jump": "dumbbell_seated_box_jump",
+ "dumbbell_squat": "dumbbell_squat",
+ "dumbbell_squat_to_a_bench": "dumbbell_squat_to_a_bench",
+ "dumbbell_step_ups": "dumbbell_step_ups",
+ "elevated_back_lunge": "elevated_back_lunge",
+ "elliptical_trainer": "elliptical_trainer",
+ "fast_skipping": "fast_skipping",
+ "frankenstein_squat": "frankenstein_squat",
+ "freehand_jump_squat": "freehand_jump_squat",
+ "frog_hops": "frog_hops",
+ "front_barbell_squat": "front_barbell_squat",
+ "front_barbell_squat_to_a_bench": "front_barbell_squat_to_a_bench",
+ "front_cone_hops_or_hurdle_hops": "front_cone_hops_or_hurdle_hops",
+ "front_squat_clean_grip": "front_squat_clean_grip",
+ "front_squats_with_two_kettlebells": "front_squats_with_two_kettlebells",
+ "goblet_squat": "goblet_squat",
+ "hack_squat": "hack_squat",
+ "hang_clean": "hang_clean",
+ "hang_clean__below_the_knees": "hang_clean__below_the_knees",
+ "heaving_snatch_balance": "heaving_snatch_balance",
+ "hip_flexion_with_band": "hip_flexion_with_band",
+ "intermediate_hip_flexor_and_quad_stretch": "intermediate_hip_flexor_and_quad_stretch",
+ "iron_crosses_stretch": "iron_crosses_stretch",
+ "jefferson_squats": "jefferson_squats",
+ "jerk_dip_squat": "jerk_dip_squat",
+ "jogging_treadmill": "jogging_treadmill",
+ "kettlebell_pistol_squat": "kettlebell_pistol_squat",
+ "kneeling_hip_flexor": "kneeling_hip_flexor",
+ "leg_extensions": "leg_extensions",
+ "leg_press": "leg_press",
+ "leverage_deadlift": "leverage_deadlift",
+ "linear_depth_jump": "linear_depth_jump",
+ "looking_at_ceiling": "looking_at_ceiling",
+ "lunge_sprint": "lunge_sprint",
+ "lying_machine_squat": "lying_machine_squat",
+ "lying_prone_quadriceps": "lying_prone_quadriceps",
+ "mountain_climbers": "mountain_climbers",
+ "narrow_stance_hack_squats": "narrow_stance_hack_squats",
+ "narrow_stance_leg_press": "narrow_stance_leg_press",
+ "narrow_stance_squats": "narrow_stance_squats",
+ "olympic_squat": "olympic_squat",
+ "on_your_side_quad_stretch": "on_your_side_quad_stretch",
+ "onyourback_quad_stretch": "onyourback_quad_stretch",
+ "one_half_locust": "one_half_locust",
+ "one_leg_barbell_squat": "one_leg_barbell_squat",
+ "onearm_overhead_kettlebell_squats": "onearm_overhead_kettlebell_squats",
+ "onearm_side_deadlift": "onearm_side_deadlift",
+ "overhead_squat": "overhead_squat",
+ "plie_dumbbell_squat": "plie_dumbbell_squat",
+ "power_jerk": "power_jerk",
+ "power_snatch_from_blocks": "power_snatch_from_blocks",
+ "quad_stretch": "quad_stretch",
+ "quadricepssmr": "quadricepssmr",
+ "quick_leap": "quick_leap",
+ "rear_leg_raises": "rear_leg_raises",
+ "recumbent_bike": "recumbent_bike",
+ "reverse_band_box_squat": "reverse_band_box_squat",
+ "reverse_band_power_squat": "reverse_band_power_squat",
+ "rickshaw_deadlift": "rickshaw_deadlift",
+ "rocket_jump": "rocket_jump",
+ "rope_jumping": "rope_jumping",
+ "rowing_stationary": "rowing_stationary",
+ "running_treadmill": "running_treadmill",
+ "sandbag_load": "sandbag_load",
+ "scissors_jump": "scissors_jump",
+ "side_hopsprint": "side_hopsprint",
+ "side_standing_long_jump": "side_standing_long_jump",
+ "side_to_side_box_shuffle": "side_to_side_box_shuffle",
+ "single_leg_butt_kick": "single_leg_butt_kick",
+ "single_leg_pushoff": "single_leg_pushoff",
+ "singlecone_sprint_drill": "singlecone_sprint_drill",
+ "singleleg_high_box_squat": "singleleg_high_box_squat",
+ "singleleg_hop_progression": "singleleg_hop_progression",
+ "singleleg_lateral_hop": "singleleg_lateral_hop",
+ "singleleg_leg_extension": "singleleg_leg_extension",
+ "singleleg_stride_jump": "singleleg_stride_jump",
+ "sit_squats": "sit_squats",
+ "skating": "skating",
+ "sled_drag__harness": "sled_drag__harness",
+ "sled_push": "sled_push",
+ "smith_machine_leg_press": "smith_machine_leg_press",
+ "smith_machine_pistol_squat": "smith_machine_pistol_squat",
+ "smith_machine_squat": "smith_machine_squat",
+ "smith_singleleg_split_squat": "smith_singleleg_split_squat",
+ "snatch": "snatch",
+ "snatch_balance": "snatch_balance",
+ "snatch_from_blocks": "snatch_from_blocks",
+ "speed_box_squat": "speed_box_squat",
+ "speed_squats": "speed_squats",
+ "split_clean": "split_clean",
+ "split_jerk": "split_jerk",
+ "split_jump": "split_jump",
+ "split_squat_with_dumbbells": "split_squat_with_dumbbells",
+ "squat_jerk": "squat_jerk",
+ "squat_with_bands": "squat_with_bands",
+ "squat_with_chains": "squat_with_chains",
+ "squat_with_plate_movers": "squat_with_plate_movers",
+ "squats__with_bands": "squats__with_bands",
+ "stairmaster": "stairmaster",
+ "standing_elevated_quad_stretch": "standing_elevated_quad_stretch",
+ "standing_hip_flexors": "standing_hip_flexors",
+ "standing_long_jump": "standing_long_jump",
+ "star_jump": "star_jump",
+ "step_mill": "step_mill",
+ "stride_jump_crossover": "stride_jump_crossover",
+ "suspended_split_squat": "suspended_split_squat",
+ "tire_flip": "tire_flip",
+ "trail_runningwalking": "trail_runningwalking",
+ "trap_bar_deadlift": "trap_bar_deadlift",
+ "walking_treadmill": "walking_treadmill",
+ "weighted_jump_squat": "weighted_jump_squat",
+ "weighted_sissy_squat": "weighted_sissy_squat",
+ "weighted_squat": "weighted_squat",
+ "wide_stance_barbell_squat": "wide_stance_barbell_squat",
+ "yoke_walk": "yoke_walk",
+ "zercher_squats": "zercher_squats",
+ "alternating_cable_shoulder_press": "alternating_cable_shoulder_press",
+ "alternating_deltoid_raise": "alternating_deltoid_raise",
+ "alternating_kettlebell_press": "alternating_kettlebell_press",
+ "antigravity_press": "antigravity_press",
+ "arm_circles": "arm_circles",
+ "arnold_dumbbell_press": "arnold_dumbbell_press",
+ "back_flyes__with_bands": "back_flyes__with_bands",
+ "backward_medicine_ball_throw": "backward_medicine_ball_throw",
+ "band_pull_apart": "band_pull_apart",
+ "barbell_incline_shoulder_raise": "barbell_incline_shoulder_raise",
+ "barbell_rear_delt_row": "longhaul_rear_delt_row_barbell",
+ "barbell_shoulder_press": "barbell_shoulder_press",
+ "battling_ropes": "battling_ropes",
+ "bent_over_dumbbell_rear_delt_raise_with_head_on_bench": "bent_over_dumbbell_rear_delt_raise_with_head_on_bench",
+ "bent_over_lowpulley_side_lateral": "bent_over_lowpulley_side_lateral",
+ "bradfordrocky_presses": "bradfordrocky_presses",
+ "cable_internal_rotation": "cable_internal_rotation",
+ "cable_rear_delt_fly": "cable_rear_delt_fly",
+ "cable_rope_reardelt_rows": "cable_rope_reardelt_rows",
+ "cable_seated_lateral_raise": "cable_seated_lateral_raise",
+ "cable_shoulder_press": "cable_shoulder_press",
+ "car_drivers": "car_drivers",
+ "chair_upper_body_stretch": "chair_upper_body_stretch",
+ "circus_bell": "circus_bell",
+ "clean_and_jerk": "clean_and_jerk",
+ "clean_and_press": "clean_and_press",
+ "crucifix": "crucifix",
+ "cuban_press": "cuban_press",
+ "double_kettlebell_jerk": "double_kettlebell_jerk",
+ "double_kettlebell_push_press": "double_kettlebell_push_press",
+ "double_kettlebell_snatch": "double_kettlebell_snatch",
+ "dumbbell_incline_shoulder_raise": "dumbbell_incline_shoulder_raise",
+ "dumbbell_lying_onearm_rear_lateral_raise": "dumbbell_lying_onearm_rear_lateral_raise",
+ "dumbbell_lying_rear_lateral_raise": "dumbbell_lying_rear_lateral_raise",
+ "dumbbell_onearm_shoulder_press": "dumbbell_onearm_shoulder_press",
+ "dumbbell_onearm_upright_row": "dumbbell_onearm_upright_row",
+ "dumbbell_raise": "dumbbell_raise",
+ "dumbbell_scaption": "dumbbell_scaption",
+ "dumbbell_shoulder_press": "dumbbell_shoulder_press",
+ "elbow_circles": "elbow_circles",
+ "external_rotation": "external_rotation",
+ "external_rotation_with_band": "external_rotation_with_band",
+ "external_rotation_with_cable": "external_rotation_with_cable",
+ "face_pull": "face_pull",
+ "front_cable_raise": "front_cable_raise",
+ "front_dumbbell_raise": "front_dumbbell_raise",
+ "front_incline_dumbbell_raise": "front_incline_dumbbell_raise",
+ "front_plate_raise": "front_plate_raise",
+ "front_twodumbbell_raise": "front_twodumbbell_raise",
+ "handstand_pushups": "handstand_pushups",
+ "internal_rotation_with_band": "internal_rotation_with_band",
+ "iron_cross": "iron_cross",
+ "jerk_balance": "jerk_balance",
+ "kettlebell_arnold_press": "kettlebell_arnold_press",
+ "kettlebell_pirate_ships": "kettlebell_pirate_ships",
+ "kettlebell_seated_press": "kettlebell_seated_press",
+ "kettlebell_seesaw_press": "kettlebell_seesaw_press",
+ "kettlebell_thruster": "kettlebell_thruster",
+ "kettlebell_turkish_getup_lunge_style": "kettlebell_turkish_getup_lunge_style",
+ "kettlebell_turkish_getup_squat_style": "kettlebell_turkish_getup_squat_style",
+ "kneeling_arm_drill": "kneeling_arm_drill",
+ "landmine_linear_jammer": "landmine_linear_jammer",
+ "lateral_raise__with_bands": "lateral_raise__with_bands",
+ "leverage_shoulder_press": "leverage_shoulder_press",
+ "log_lift": "log_lift",
+ "low_pulley_row_to_neck": "low_pulley_row_to_neck",
+ "lying_onearm_lateral_raise": "lying_onearm_lateral_raise",
+ "lying_rear_delt_raise": "lying_rear_delt_raise",
+ "machine_shoulder_military_press": "machine_shoulder_military_press",
+ "medicine_ball_scoop_throw": "medicine_ball_scoop_throw",
+ "onearm_incline_lateral_raise": "onearm_incline_lateral_raise",
+ "onearm_kettlebell_clean_and_jerk": "onearm_kettlebell_clean_and_jerk",
+ "onearm_kettlebell_jerk": "onearm_kettlebell_jerk",
+ "onearm_kettlebell_military_press_to_the_side": "onearm_kettlebell_military_press_to_the_side",
+ "onearm_kettlebell_para_press": "onearm_kettlebell_para_press",
+ "onearm_kettlebell_push_press": "onearm_kettlebell_push_press",
+ "onearm_kettlebell_snatch": "onearm_kettlebell_snatch",
+ "onearm_kettlebell_split_jerk": "onearm_kettlebell_split_jerk",
+ "onearm_kettlebell_split_snatch": "onearm_kettlebell_split_snatch",
+ "onearm_side_laterals": "onearm_side_laterals",
+ "power_partials": "power_partials",
+ "push_press": "push_press",
+ "push_press__behind_the_neck": "push_press__behind_the_neck",
+ "rack_delivery": "rack_delivery",
+ "return_push_from_stance": "return_push_from_stance",
+ "reverse_flyes": "reverse_flyes",
+ "reverse_flyes_with_external_rotation": "reverse_flyes_with_external_rotation",
+ "reverse_machine_flyes": "reverse_machine_flyes",
+ "round_the_world_shoulder_stretch": "round_the_world_shoulder_stretch",
+ "seated_barbell_military_press": "seated_barbell_military_press",
+ "seated_bentover_rear_delt_raise": "seated_bentover_rear_delt_raise",
+ "seated_cable_shoulder_press": "seated_cable_shoulder_press",
+ "seated_dumbbell_press": "seated_dumbbell_press",
+ "seated_front_deltoid": "seated_front_deltoid",
+ "seated_side_lateral_raise": "seated_side_lateral_raise",
+ "seesaw_press_alternating_side_press": "seesaw_press_alternating_side_press",
+ "shoulder_circles": "shoulder_circles",
+ "shoulder_press__with_bands": "shoulder_press__with_bands",
+ "shoulder_raise": "shoulder_raise",
+ "shoulder_stretch": "shoulder_stretch",
+ "side_lateral_raise": "side_lateral_raise",
+ "side_laterals_to_front_raise": "side_laterals_to_front_raise",
+ "side_wrist_pull": "side_wrist_pull",
+ "single_dumbbell_raise": "single_dumbbell_raise",
+ "singlearm_linear_jammer": "singlearm_linear_jammer",
+ "sled_overhead_backward_walk": "sled_overhead_backward_walk",
+ "sled_reverse_flye": "sled_reverse_flye",
+ "smith_incline_shoulder_raise": "smith_incline_shoulder_raise",
+ "smith_machine_onearm_upright_row": "smith_machine_onearm_upright_row",
+ "smith_machine_overhead_shoulder_press": "smith_machine_overhead_shoulder_press",
+ "standing_alternating_dumbbell_press": "standing_alternating_dumbbell_press",
+ "standing_barbell_press_behind_neck": "standing_barbell_press_behind_neck",
+ "standing_bradford_press": "standing_bradford_press",
+ "standing_dumbbell_press": "standing_dumbbell_press",
+ "standing_dumbbell_straightarm_front_delt_raise_above_head": "standing_dumbbell_straightarm_front_delt_raise_above_head",
+ "standing_front_barbell_raise_over_head": "standing_front_barbell_raise_over_head",
+ "standing_lowpulley_deltoid_raise": "standing_lowpulley_deltoid_raise",
+ "standing_military_press": "standing_military_press",
+ "standing_palmin_onearm_dumbbell_press": "standing_palmin_onearm_dumbbell_press",
+ "standing_palmsin_dumbbell_press": "standing_palmsin_dumbbell_press",
+ "standing_twoarm_overhead_throw": "standing_twoarm_overhead_throw",
+ "straight_raises_on_incline_bench": "straight_raises_on_incline_bench",
+ "twoarm_kettlebell_clean": "twoarm_kettlebell_clean",
+ "twoarm_kettlebell_jerk": "twoarm_kettlebell_jerk",
+ "twoarm_kettlebell_military_press": "twoarm_kettlebell_military_press",
+ "upright_barbell_row": "upright_barbell_row",
+ "upward_stretch": "upward_stretch",
+ "barbell_shrug": "barbell_shrug",
+ "barbell_shrug_behind_the_back": "barbell_shrug_behind_the_back",
+ "cable_shrugs": "cable_shrugs",
+ "calfmachine_shoulder_shrug": "calfmachine_shoulder_shrug",
+ "clean_shrug": "clean_shrug",
+ "dumbbell_shrug": "dumbbell_shrug",
+ "kettlebell_sumo_high_pull": "kettlebell_sumo_high_pull",
+ "leverage_shrug": "leverage_shrug",
+ "scapular_pullup": "scapular_pullup",
+ "smith_machine_behind_the_back_shrug": "smith_machine_behind_the_back_shrug",
+ "smith_machine_upright_row": "smith_machine_upright_row",
+ "snatch_shrug": "snatch_shrug",
+ "standing_dumbbell_upright_row": "standing_dumbbell_upright_row",
+ "upright_cable_row": "upright_cable_row",
+ "upright_row__with_bands": "upright_row__with_bands",
+ "band_skull_crusher": "band_skull_crusher",
+ "bench_dips": "bench_dips",
+ "bench_press__powerlifting": "bench_press__powerlifting",
+ "bench_press_with_chains": "bench_press_with_chains",
+ "board_press": "board_press",
+ "body_tricep_press": "body_tricep_press",
+ "bodyup": "bodyup",
+ "cable_incline_triceps_extension": "cable_incline_triceps_extension",
+ "cable_lying_triceps_extension": "cable_lying_triceps_extension",
+ "cable_one_arm_tricep_extension": "cable_one_arm_tricep_extension",
+ "cable_rope_overhead_triceps_extension": "cable_rope_overhead_triceps_extension",
+ "chain_handle_extension": "chain_handle_extension",
+ "closegrip_barbell_bench_press": "closegrip_barbell_bench_press",
+ "closegrip_dumbbell_press": "closegrip_dumbbell_press",
+ "closegrip_ezbar_press": "closegrip_ezbar_press",
+ "closegrip_pushup_off_of_a_dumbbell": "closegrip_pushup_off_of_a_dumbbell",
+ "decline_closegrip_bench_to_skull_crusher": "decline_closegrip_bench_to_skull_crusher",
+ "decline_dumbbell_triceps_extension": "decline_dumbbell_triceps_extension",
+ "decline_ez_bar_triceps_extension": "decline_ez_bar_triceps_extension",
+ "dip_machine": "dip_machine",
+ "dips__triceps_version": "dips__triceps_version",
+ "dumbbell_floor_press": "dumbbell_floor_press",
+ "dumbbell_onearm_triceps_extension": "dumbbell_onearm_triceps_extension",
+ "dumbbell_tricep_extension_pronated_grip": "dumbbell_tricep_extension_pronated_grip",
+ "ezbar_skullcrusher": "ezbar_skullcrusher",
+ "floor_press": "floor_press",
+ "floor_press_with_chains": "floor_press_with_chains",
+ "incline_barbell_triceps_extension": "incline_barbell_triceps_extension",
+ "incline_pushup_closegrip": "incline_pushup_closegrip",
+ "jm_press": "jm_press",
+ "kneeling_cable_triceps_extension": "kneeling_cable_triceps_extension",
+ "low_cable_triceps_extension": "low_cable_triceps_extension",
+ "lying_closegrip_barbell_triceps_extension_behind_the_head": "lying_closegrip_barbell_triceps_extension_behind_the_head",
+ "lying_closegrip_barbell_triceps_press_to_chin": "lying_closegrip_barbell_triceps_press_to_chin",
+ "lying_dumbbell_tricep_extension": "lying_dumbbell_tricep_extension",
+ "lying_triceps_press": "lying_triceps_press",
+ "machine_triceps_extension": "machine_triceps_extension",
+ "one_arm_floor_press": "one_arm_floor_press",
+ "one_arm_pronated_dumbbell_triceps_extension": "one_arm_pronated_dumbbell_triceps_extension",
+ "one_arm_supinated_dumbbell_triceps_extension": "one_arm_supinated_dumbbell_triceps_extension",
+ "overhead_triceps": "overhead_triceps",
+ "parallel_bar_dip": "parallel_bar_dip",
+ "pin_presses": "pin_presses",
+ "pushups__close_triceps_position": "pushups__close_triceps_position",
+ "reverse_band_bench_press": "reverse_band_bench_press",
+ "reverse_grip_triceps_pushdown": "reverse_grip_triceps_pushdown",
+ "reverse_triceps_bench_press": "reverse_triceps_bench_press",
+ "ring_dips": "ring_dips",
+ "seated_bentover_onearm_dumbbell_triceps_extension": "seated_bentover_onearm_dumbbell_triceps_extension",
+ "seated_bentover_twoarm_dumbbell_triceps_extension": "seated_bentover_twoarm_dumbbell_triceps_extension",
+ "seated_triceps_press": "seated_triceps_press",
+ "sled_overhead_triceps_extension": "sled_overhead_triceps_extension",
+ "smith_machine_closegrip_bench_press": "smith_machine_closegrip_bench_press",
+ "speed_band_overhead_triceps": "speed_band_overhead_triceps",
+ "standing_bentover_onearm_dumbbell_triceps_extension": "standing_bentover_onearm_dumbbell_triceps_extension",
+ "standing_bentover_twoarm_dumbbell_triceps_extension": "standing_bentover_twoarm_dumbbell_triceps_extension",
+ "standing_dumbbell_triceps_extension": "standing_dumbbell_triceps_extension",
+ "standing_lowpulley_onearm_triceps_extension": "standing_lowpulley_onearm_triceps_extension",
+ "standing_onearm_dumbbell_triceps_extension": "standing_onearm_dumbbell_triceps_extension",
+ "standing_overhead_barbell_triceps_extension": "standing_overhead_barbell_triceps_extension",
+ "standing_towel_triceps_extension": "standing_towel_triceps_extension",
+ "supine_chest_throw": "supine_chest_throw",
+ "tate_press": "tate_press",
+ "tricep_dumbbell_kickback": "tricep_dumbbell_kickback",
+ "tricep_side_stretch": "tricep_side_stretch",
+ "triceps_overhead_extension_with_rope": "triceps_overhead_extension_with_rope",
+ "triceps_pushdown": "triceps_pushdown",
+ "triceps_pushdown__rope_attachment": "triceps_pushdown__rope_attachment",
+ "triceps_pushdown__vbar_attachment": "triceps_pushdown__vbar_attachment",
+ "triceps_stretch": "triceps_stretch",
+ "weighted_bench_dip": "weighted_bench_dip",
+ "longhaul_bench_press_smith_machine": "longhaul_bench_press_smith_machine",
+ "longhaul_calf_raise_leg_press_machine": "longhaul_calf_raise_leg_press_machine",
+ "longhaul_close_grip_feet_up_bench_press_barbell": "longhaul_close_grip_feet_up_bench_press_barbell",
+ "longhaul_deadlift_trap_bar_high_handles": "longhaul_deadlift_trap_bar_high_handles",
+ "longhaul_deadlift_trap_bar_low_handles": "longhaul_deadlift_trap_bar_low_handles",
+ "longhaul_external_shoulder_rotation_band": "longhaul_external_shoulder_rotation_band",
+ "longhaul_external_shoulder_rotation_cable": "longhaul_external_shoulder_rotation_cable",
+ "longhaul_glute_kickback_machine": "longhaul_glute_kickback_machine",
+ "longhaul_hack_squat_barbell": "longhaul_hack_squat_barbell",
+ "longhaul_hack_squat_landmine": "longhaul_hack_squat_landmine",
+ "longhaul_hack_squat_machine": "longhaul_hack_squat_machine",
+ "longhaul_high_to_low_wood_chop_cable": "longhaul_high_to_low_wood_chop_cable",
+ "longhaul_hip_abduction_band": "longhaul_hip_abduction_band",
+ "longhaul_hip_abduction_machine": "longhaul_hip_abduction_machine",
+ "longhaul_hip_adduction_machine": "longhaul_hip_adduction_machine",
+ "longhaul_horizontal_external_shoulder_rotation_dumbbell": "longhaul_horizontal_external_shoulder_rotation_dumbbell",
+ "longhaul_horizontal_internal_shoulder_rotation_dumbbell": "longhaul_horizontal_internal_shoulder_rotation_dumbbell",
+ "longhaul_horizontal_wood_chop_band": "longhaul_horizontal_wood_chop_band",
+ "longhaul_horizontal_wood_chop_cable": "longhaul_horizontal_wood_chop_cable",
+ "longhaul_incline_bench_press_smith_machine": "longhaul_incline_bench_press_smith_machine",
+ "longhaul_internal_shoulder_rotation_band": "longhaul_internal_shoulder_rotation_band",
+ "longhaul_internal_shoulder_rotation_cable": "longhaul_internal_shoulder_rotation_cable",
+ "longhaul_landmine_rotation": "longhaul_landmine_rotation",
+ "longhaul_leg_press_machine": "longhaul_leg_press_machine",
+ "longhaul_lying_external_shoulder_rotation_dumbbell": "longhaul_lying_external_shoulder_rotation_dumbbell",
+ "longhaul_lying_internal_shoulder_rotation_dumbbell": "longhaul_lying_internal_shoulder_rotation_dumbbell",
+ "longhaul_one_handed_shoulder_press_landmine": "longhaul_one_handed_shoulder_press_landmine",
+ "longhaul_pause_squat_barbell": "longhaul_pause_squat_barbell",
+ "longhaul_pull_apart_band": "band_pull_apart",
+ "longhaul_pullover_barbell": "longhaul_pullover_barbell",
+ "longhaul_pullover_dumbbell": "longhaul_pullover_dumbbell",
+ "longhaul_rear_delt_row_barbell": "longhaul_rear_delt_row_barbell",
+ "longhaul_rear_delt_row_cable": "longhaul_rear_delt_row_cable",
+ "longhaul_rear_delt_row_dumbbell": "longhaul_rear_delt_row_dumbbell",
+ "longhaul_row_t_bar": "longhaul_row_t_bar",
+ "longhaul_seated_shoulder_press_smith_machine": "longhaul_seated_shoulder_press_smith_machine",
+ "longhaul_shrug_trap_bar": "longhaul_shrug_trap_bar",
+ "longhaul_single_arm_half_kneeling_high_row_cable": "longhaul_single_arm_half_kneeling_high_row_cable",
+ "longhaul_single_leg_romanian_deadlift_landmine": "longhaul_single_leg_romanian_deadlift_landmine",
+ "longhaul_squat_belt": "longhaul_squat_belt",
+ "longhaul_squat_landmine": "longhaul_squat_landmine",
+ "longhaul_squat_smith_machine": "longhaul_squat_smith_machine",
+ "longhaul_stability_ball_pullover_dumbbell": "longhaul_stability_ball_pullover_dumbbell",
+ "longhaul_standing_external_shoulder_rotation_dumbbell": "longhaul_standing_external_shoulder_rotation_dumbbell",
+ "longhaul_standing_glute_kickback_machine": "longhaul_standing_glute_kickback_machine",
+ "longhaul_upright_row_barbell": "longhaul_upright_row_barbell"
+ },
+ "duplicateResolutionLog": [
+ {
+ "keptId": "ab_roller",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "air_bike",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "cable_shrugs",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "concentration_curls",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "dumbbell_step_ups",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "incline_hammer_curls",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "landmine_180s",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "machine_preacher_curls",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "overhead_press",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "mountain_climbers",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "plank_up_down",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "rack_pulls",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "seated_good_mornings",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "weighted_dip",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ },
+ {
+ "keptId": "zercher_squats",
+ "removedIds": [],
+ "reason": "Merged true duplicate/name-format duplicate; aliases preserved on canonical record.",
+ "aliases": [],
+ "confidence": "high"
+ }
+ ],
+ "breakingChanges": [
+ {
+ "type": "tracking_type_changed",
+ "oldId": "ab_crunch_machine",
+ "newId": "ab_crunch_machine",
+ "exerciseName": "Ab Crunch Machine",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "ab_roller",
+ "newId": "ab_roller",
+ "exerciseName": "Ab Wheel Rollout",
+ "oldValue": "Ab Roller",
+ "newValue": "Ab Wheel Rollout",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "air_bike",
+ "newId": "air_bike",
+ "exerciseName": "Bicycle Crunch",
+ "oldValue": "Air Bike",
+ "newValue": "Bicycle Crunch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "air_bike",
+ "newId": "air_bike",
+ "exerciseName": "Bicycle Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_ab_rollout__on_knees",
+ "newId": "barbell_ab_rollout__on_knees",
+ "exerciseName": "Barbell Ab Rollout - on Knees",
+ "oldValue": "Barbell Ab Rollout - On Knees",
+ "newValue": "Barbell Ab Rollout - on Knees",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_rollout_from_bench",
+ "newId": "barbell_rollout_from_bench",
+ "exerciseName": "Barbell Rollout From Bench",
+ "oldValue": "Barbell Rollout from Bench",
+ "newValue": "Barbell Rollout From Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "bosu_ball_cable_crunch_with_side_bends",
+ "newId": "bosu_ball_cable_crunch_with_side_bends",
+ "exerciseName": "Bosu Ball Cable Crunch With Side Bends",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "bottoms_up",
+ "newId": "bottoms_up",
+ "exerciseName": "Bottoms up",
+ "oldValue": "Bottoms Up",
+ "newValue": "Bottoms up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "cable_crunch",
+ "newId": "cable_crunch",
+ "exerciseName": "Cable Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "cable_reverse_crunch",
+ "newId": "cable_reverse_crunch",
+ "exerciseName": "Cable Reverse Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "cable_seated_crunch",
+ "newId": "cable_seated_crunch",
+ "exerciseName": "Cable Seated Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "crossbody_crunch",
+ "newId": "crossbody_crunch",
+ "exerciseName": "Cross-Body Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "crunch__hands_overhead",
+ "newId": "crunch__hands_overhead",
+ "exerciseName": "Crunch - Hands Overhead",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "crunch__legs_on_exercise_ball",
+ "newId": "crunch__legs_on_exercise_ball",
+ "exerciseName": "Crunch - Legs on Exercise Ball",
+ "oldValue": "Crunch - Legs On Exercise Ball",
+ "newValue": "Crunch - Legs on Exercise Ball",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "crunch__legs_on_exercise_ball",
+ "newId": "crunch__legs_on_exercise_ball",
+ "exerciseName": "Crunch - Legs on Exercise Ball",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "crunches",
+ "newId": "crunches",
+ "exerciseName": "Crunches",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "decline_crunch",
+ "newId": "decline_crunch",
+ "exerciseName": "Decline Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "decline_oblique_crunch",
+ "newId": "decline_oblique_crunch",
+ "exerciseName": "Decline Oblique Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "decline_reverse_crunch",
+ "newId": "decline_reverse_crunch",
+ "exerciseName": "Decline Reverse Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "exercise_ball_crunch",
+ "newId": "exercise_ball_crunch",
+ "exerciseName": "Exercise Ball Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "flat_bench_leg_pullin",
+ "newId": "flat_bench_leg_pullin",
+ "exerciseName": "Flat Bench Leg Pull-In",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "gorilla_chincrunch",
+ "newId": "gorilla_chincrunch",
+ "exerciseName": "Gorilla Chin/Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "jackknife_situp",
+ "newId": "jackknife_situp",
+ "exerciseName": "Jackknife Sit-up",
+ "oldValue": "Jackknife Sit-Up",
+ "newValue": "Jackknife Sit-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "janda_situp",
+ "newId": "janda_situp",
+ "exerciseName": "Janda Sit-up",
+ "oldValue": "Janda Sit-Up",
+ "newValue": "Janda Sit-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "kettlebell_pass_between_the_legs",
+ "newId": "kettlebell_pass_between_the_legs",
+ "exerciseName": "Kettlebell Pass Between the Legs",
+ "oldValue": "Kettlebell Pass Between The Legs",
+ "newValue": "Kettlebell Pass Between the Legs",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "kneehip_raise_on_parallel_bars",
+ "newId": "kneehip_raise_on_parallel_bars",
+ "exerciseName": "Knee/Hip Raise on Parallel Bars",
+ "oldValue": "Knee/Hip Raise On Parallel Bars",
+ "newValue": "Knee/Hip Raise on Parallel Bars",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "kneeling_cable_crunch_with_alternating_oblique_twists",
+ "newId": "kneeling_cable_crunch_with_alternating_oblique_twists",
+ "exerciseName": "Kneeling Cable Crunch With Alternating Oblique Twists",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "landmine_180s",
+ "newId": "landmine_180s",
+ "exerciseName": "Landmine 180",
+ "oldValue": "Landmine 180's",
+ "newValue": "Landmine 180",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "oblique_crunches",
+ "newId": "oblique_crunches",
+ "exerciseName": "Oblique Crunches",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "oblique_crunches__on_the_floor",
+ "newId": "oblique_crunches__on_the_floor",
+ "exerciseName": "Oblique Crunches - on the Floor",
+ "oldValue": "Oblique Crunches - On The Floor",
+ "newValue": "Oblique Crunches - on the Floor",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "oblique_crunches__on_the_floor",
+ "newId": "oblique_crunches__on_the_floor",
+ "exerciseName": "Oblique Crunches - on the Floor",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "otisup",
+ "newId": "otisup",
+ "exerciseName": "Otis-up",
+ "oldValue": "Otis-Up",
+ "newValue": "Otis-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "overhead_stretch",
+ "newId": "overhead_stretch",
+ "exerciseName": "Overhead Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "plank",
+ "newId": "plank",
+ "exerciseName": "Plank",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "press_situp",
+ "newId": "press_situp",
+ "exerciseName": "Press Sit-up",
+ "oldValue": "Press Sit-Up",
+ "newValue": "Press Sit-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "reverse_crunch",
+ "newId": "reverse_crunch",
+ "exerciseName": "Reverse Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "rope_crunch",
+ "newId": "rope_crunch",
+ "exerciseName": "Rope Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_flat_bench_leg_pullin",
+ "newId": "seated_flat_bench_leg_pullin",
+ "exerciseName": "Seated Flat Bench Leg Pull-In",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_overhead_stretch",
+ "newId": "seated_overhead_stretch",
+ "exerciseName": "Seated Overhead Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "side_bridge",
+ "newId": "side_bridge",
+ "exerciseName": "Side Bridge",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "situp",
+ "newId": "situp",
+ "exerciseName": "Sit-up",
+ "oldValue": "Sit-Up",
+ "newValue": "Sit-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "spider_crawl",
+ "newId": "spider_crawl",
+ "exerciseName": "Spider Crawl",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_lateral_stretch",
+ "newId": "standing_lateral_stretch",
+ "exerciseName": "Standing Lateral Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_rope_crunch",
+ "newId": "standing_rope_crunch",
+ "exerciseName": "Standing Rope Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "stomach_vacuum",
+ "newId": "stomach_vacuum",
+ "exerciseName": "Stomach Vacuum",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "suspended_reverse_crunch",
+ "newId": "suspended_reverse_crunch",
+ "exerciseName": "Suspended Reverse Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "tuck_crunch",
+ "newId": "tuck_crunch",
+ "exerciseName": "Tuck Crunch",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "weighted_crunches",
+ "newId": "weighted_crunches",
+ "exerciseName": "Weighted Crunches",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "wind_sprints",
+ "newId": "wind_sprints",
+ "exerciseName": "Wind Sprints",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hip_circles_prone",
+ "newId": "hip_circles_prone",
+ "exerciseName": "Hip Circles (prone)",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "it_band_and_glute_stretch",
+ "newId": "it_band_and_glute_stretch",
+ "exerciseName": "IT Band and Glute Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "it_band_and_glute_stretch",
+ "newId": "it_band_and_glute_stretch",
+ "exerciseName": "IT Band and Glute Stretch",
+ "oldValue": "Bodyweight",
+ "newValue": "Band",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "iliotibial_tractsmr",
+ "newId": "iliotibial_tractsmr",
+ "exerciseName": "Iliotibial Tract-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "monster_walk",
+ "newId": "monster_walk",
+ "exerciseName": "Monster Walk",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_hip_circles",
+ "newId": "standing_hip_circles",
+ "exerciseName": "Standing Hip Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "windmills",
+ "newId": "windmills",
+ "exerciseName": "Windmills",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "adductorgroin",
+ "newId": "adductorgroin",
+ "exerciseName": "Adductor/Groin",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "carioca_quick_step",
+ "newId": "carioca_quick_step",
+ "exerciseName": "Carioca Quick Step",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "groin_and_back_stretch",
+ "newId": "groin_and_back_stretch",
+ "exerciseName": "Groin and Back Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lateral_bound",
+ "newId": "lateral_bound",
+ "exerciseName": "Lateral Bound",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lateral_box_jump",
+ "newId": "lateral_box_jump",
+ "exerciseName": "Lateral Box Jump",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lateral_cone_hops",
+ "newId": "lateral_cone_hops",
+ "exerciseName": "Lateral Cone Hops",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lying_bent_leg_groin",
+ "newId": "lying_bent_leg_groin",
+ "exerciseName": "Lying Bent Leg Groin",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "side_lying_groin_stretch",
+ "newId": "side_lying_groin_stretch",
+ "exerciseName": "Side Lying Groin Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "brachialissmr",
+ "newId": "brachialissmr",
+ "exerciseName": "Brachialis-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "closegrip_ezbar_curl_with_band",
+ "newId": "closegrip_ezbar_curl_with_band",
+ "exerciseName": "Close-Grip EZ-Bar Curl With Band",
+ "oldValue": "Close-Grip EZ-Bar Curl with Band",
+ "newValue": "Close-Grip EZ-Bar Curl With Band",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "concentration_curls",
+ "newId": "concentration_curls",
+ "exerciseName": "Concentration Curl",
+ "oldValue": "Concentration Curls",
+ "newValue": "Concentration Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hammer_curls",
+ "newId": "hammer_curls",
+ "exerciseName": "Hammer Curl",
+ "oldValue": "Hammer Curls",
+ "newValue": "Hammer Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_hammer_curls",
+ "newId": "incline_hammer_curls",
+ "exerciseName": "Incline Hammer Curl",
+ "oldValue": "Incline Hammer Curls",
+ "newValue": "Incline Hammer Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "lying_closegrip_bar_curl_on_high_pulley",
+ "newId": "lying_closegrip_bar_curl_on_high_pulley",
+ "exerciseName": "Lying Close-Grip Bar Curl on High Pulley",
+ "oldValue": "Lying Close-Grip Bar Curl On High Pulley",
+ "newValue": "Lying Close-Grip Bar Curl on High Pulley",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "machine_preacher_curls",
+ "newId": "machine_preacher_curls",
+ "exerciseName": "Machine Preacher Curl",
+ "oldValue": "Machine Preacher Curls",
+ "newValue": "Machine Preacher Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_biceps_stretch",
+ "newId": "standing_biceps_stretch",
+ "exerciseName": "Standing Biceps Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "ankle_circles",
+ "newId": "ankle_circles",
+ "exerciseName": "Ankle Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "anterior_tibialissmr",
+ "newId": "anterior_tibialissmr",
+ "exerciseName": "Anterior Tibialis-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "calf_press_on_the_leg_press_machine",
+ "newId": "calf_press_on_the_leg_press_machine",
+ "exerciseName": "Calf Press on the Leg Press Machine",
+ "oldValue": "Calf Press On The Leg Press Machine",
+ "newValue": "Calf Press on the Leg Press Machine",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "calf_raise_on_a_dumbbell",
+ "newId": "calf_raise_on_a_dumbbell",
+ "exerciseName": "Calf Raise on A Dumbbell",
+ "oldValue": "Calf Raise On A Dumbbell",
+ "newValue": "Calf Raise on A Dumbbell",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "calf_stretch_elbows_against_wall",
+ "newId": "calf_stretch_elbows_against_wall",
+ "exerciseName": "Calf Stretch Elbows Against Wall",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "calf_stretch_hands_against_wall",
+ "newId": "calf_stretch_hands_against_wall",
+ "exerciseName": "Calf Stretch Hands Against Wall",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "calvessmr",
+ "newId": "calvessmr",
+ "exerciseName": "Calves-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "footsmr",
+ "newId": "footsmr",
+ "exerciseName": "Foot-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "knee_circles",
+ "newId": "knee_circles",
+ "exerciseName": "Knee Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "peroneals_stretch",
+ "newId": "peroneals_stretch",
+ "exerciseName": "Peroneals Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "peronealssmr",
+ "newId": "peronealssmr",
+ "exerciseName": "Peroneals-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "posterior_tibialis_stretch",
+ "newId": "posterior_tibialis_stretch",
+ "exerciseName": "Posterior Tibialis Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_calf_stretch",
+ "newId": "seated_calf_stretch",
+ "exerciseName": "Seated Calf Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_gastrocnemius_calf_stretch",
+ "newId": "standing_gastrocnemius_calf_stretch",
+ "exerciseName": "Standing Gastrocnemius Calf Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "standing_soleus_and_achilles_stretch",
+ "newId": "standing_soleus_and_achilles_stretch",
+ "exerciseName": "Standing Soleus and Achilles Stretch",
+ "oldValue": "Standing Soleus And Achilles Stretch",
+ "newValue": "Standing Soleus and Achilles Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_soleus_and_achilles_stretch",
+ "newId": "standing_soleus_and_achilles_stretch",
+ "exerciseName": "Standing Soleus and Achilles Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "around_the_worlds",
+ "newId": "around_the_worlds",
+ "exerciseName": "Around the Worlds",
+ "oldValue": "Around The Worlds",
+ "newValue": "Around the Worlds",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "behind_head_chest_stretch",
+ "newId": "behind_head_chest_stretch",
+ "exerciseName": "Behind Head Chest Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chest_and_front_of_shoulder_stretch",
+ "newId": "chest_and_front_of_shoulder_stretch",
+ "exerciseName": "Chest and Front of Shoulder Stretch",
+ "oldValue": "Chest And Front Of Shoulder Stretch",
+ "newValue": "Chest and Front of Shoulder Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chest_and_front_of_shoulder_stretch",
+ "newId": "chest_and_front_of_shoulder_stretch",
+ "exerciseName": "Chest and Front of Shoulder Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chest_push_multiple_response",
+ "newId": "chest_push_multiple_response",
+ "exerciseName": "Chest Push (multiple Response)",
+ "oldValue": "Chest Push (multiple response)",
+ "newValue": "Chest Push (multiple Response)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chest_push_single_response",
+ "newId": "chest_push_single_response",
+ "exerciseName": "Chest Push (single Response)",
+ "oldValue": "Chest Push (single response)",
+ "newValue": "Chest Push (single Response)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chest_push_from_3_point_stance",
+ "newId": "chest_push_from_3_point_stance",
+ "exerciseName": "Chest Push From 3 Point Stance",
+ "oldValue": "Chest Push from 3 point stance",
+ "newValue": "Chest Push From 3 Point Stance",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chest_push_with_run_release",
+ "newId": "chest_push_with_run_release",
+ "exerciseName": "Chest Push With Run Release",
+ "oldValue": "Chest Push with Run Release",
+ "newValue": "Chest Push With Run Release",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chest_push_with_run_release",
+ "newId": "chest_push_with_run_release",
+ "exerciseName": "Chest Push With Run Release",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chest_stretch_on_stability_ball",
+ "newId": "chest_stretch_on_stability_ball",
+ "exerciseName": "Chest Stretch on Stability Ball",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "clock_pushup",
+ "newId": "clock_pushup",
+ "exerciseName": "Clock Push-up",
+ "oldValue": "Clock Push-Up",
+ "newValue": "Clock Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "decline_pushup",
+ "newId": "decline_pushup",
+ "exerciseName": "Decline Push-up",
+ "oldValue": "Decline Push-Up",
+ "newValue": "Decline Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "drop_push",
+ "newId": "drop_push",
+ "exerciseName": "Drop Push",
+ "oldValue": "Bodyweight",
+ "newValue": "Conditioning",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "dumbbell_bench_press_with_neutral_grip",
+ "newId": "dumbbell_bench_press_with_neutral_grip",
+ "exerciseName": "Dumbbell Bench Press With Neutral Grip",
+ "oldValue": "Dumbbell Bench Press with Neutral Grip",
+ "newValue": "Dumbbell Bench Press With Neutral Grip",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "dynamic_chest_stretch",
+ "newId": "dynamic_chest_stretch",
+ "exerciseName": "Dynamic Chest Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "elbows_back",
+ "newId": "elbows_back",
+ "exerciseName": "Elbows Back",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "forward_drag_with_press",
+ "newId": "forward_drag_with_press",
+ "exerciseName": "Forward Drag With Press",
+ "oldValue": "Forward Drag with Press",
+ "newValue": "Forward Drag With Press",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "front_raise_and_pullover",
+ "newId": "front_raise_and_pullover",
+ "exerciseName": "Front Raise and Pullover",
+ "oldValue": "Front Raise And Pullover",
+ "newValue": "Front Raise and Pullover",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup",
+ "newId": "incline_pushup",
+ "exerciseName": "Incline Push-up",
+ "oldValue": "Incline Push-Up",
+ "newValue": "Incline Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup_depth_jump",
+ "newId": "incline_pushup_depth_jump",
+ "exerciseName": "Incline Push-up Depth Jump",
+ "oldValue": "Incline Push-Up Depth Jump",
+ "newValue": "Incline Push-up Depth Jump",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup_medium",
+ "newId": "incline_pushup_medium",
+ "exerciseName": "Incline Push-up Medium",
+ "oldValue": "Incline Push-Up Medium",
+ "newValue": "Incline Push-up Medium",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup_reverse_grip",
+ "newId": "incline_pushup_reverse_grip",
+ "exerciseName": "Incline Push-up Reverse Grip",
+ "oldValue": "Incline Push-Up Reverse Grip",
+ "newValue": "Incline Push-up Reverse Grip",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup_wide",
+ "newId": "incline_pushup_wide",
+ "exerciseName": "Incline Push-up Wide",
+ "oldValue": "Incline Push-Up Wide",
+ "newValue": "Incline Push-up Wide",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "isometric_chest_squeezes",
+ "newId": "isometric_chest_squeezes",
+ "exerciseName": "Isometric Chest Squeezes",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "isometric_wipers",
+ "newId": "isometric_wipers",
+ "exerciseName": "Isometric Wipers",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "plyo_kettlebell_pushups",
+ "newId": "plyo_kettlebell_pushups",
+ "exerciseName": "Plyo Kettlebell Push-Ups",
+ "oldValue": "Plyo Kettlebell Pushups",
+ "newValue": "Plyo Kettlebell Push-Ups",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "push_up_to_side_plank",
+ "newId": "push_up_to_side_plank",
+ "exerciseName": "Push-up to Side Plank",
+ "oldValue": "Push Up to Side Plank",
+ "newValue": "Push-up to Side Plank",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "pushup_wide",
+ "newId": "pushup_wide",
+ "exerciseName": "Push-up Wide",
+ "oldValue": "Push-Up Wide",
+ "newValue": "Push-up Wide",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "pushups_with_feet_on_an_exercise_ball",
+ "newId": "pushups_with_feet_on_an_exercise_ball",
+ "exerciseName": "Push-Ups With Feet on An Exercise Ball",
+ "oldValue": "Push-Ups With Feet On An Exercise Ball",
+ "newValue": "Push-Ups With Feet on An Exercise Ball",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "pushups",
+ "newId": "pushups",
+ "exerciseName": "Push-up",
+ "oldValue": "Pushups",
+ "newValue": "Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "pushups_close_and_wide_hand_positions",
+ "newId": "pushups_close_and_wide_hand_positions",
+ "exerciseName": "Push-Ups (close and Wide Hand Positions)",
+ "oldValue": "Pushups (Close and Wide Hand Positions)",
+ "newValue": "Push-Ups (close and Wide Hand Positions)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "singlearm_pushup",
+ "newId": "singlearm_pushup",
+ "exerciseName": "Single-Arm Push-up",
+ "oldValue": "Single-Arm Push-Up",
+ "newValue": "Single-Arm Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "smith_machine_incline_bench_press",
+ "newId": "longhaul_incline_bench_press_smith_machine",
+ "exerciseName": "Incline Bench Press - Smith Machine",
+ "oldValue": "smith_machine_incline_bench_press",
+ "newValue": "longhaul_incline_bench_press_smith_machine",
+ "impact": "workout_logs",
+ "mitigatedBy": "idMigrationMap",
+ "reason": "Old app ID maps to a canonical v2 exercise ID."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "smith_machine_incline_bench_press",
+ "newId": "longhaul_incline_bench_press_smith_machine",
+ "exerciseName": "Incline Bench Press - Smith Machine",
+ "oldValue": "Smith Machine Incline Bench Press",
+ "newValue": "Incline Bench Press - Smith Machine",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "suspended_pushup",
+ "newId": "suspended_pushup",
+ "exerciseName": "Suspended Push-up",
+ "oldValue": "Suspended Push-Up",
+ "newValue": "Suspended Push-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "bottomsup_clean_from_the_hang_position",
+ "newId": "bottomsup_clean_from_the_hang_position",
+ "exerciseName": "Bottoms-up Clean From the Hang Position",
+ "oldValue": "Bottoms-Up Clean From The Hang Position",
+ "newValue": "Bottoms-up Clean From the Hang Position",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "kneeling_forearm_stretch",
+ "newId": "kneeling_forearm_stretch",
+ "exerciseName": "Kneeling Forearm Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "palmsdown_dumbbell_wrist_curl_over_a_bench",
+ "newId": "palmsdown_dumbbell_wrist_curl_over_a_bench",
+ "exerciseName": "Palms-down Dumbbell Wrist Curl Over A Bench",
+ "oldValue": "Palms-Down Dumbbell Wrist Curl Over A Bench",
+ "newValue": "Palms-down Dumbbell Wrist Curl Over A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "palmsdown_wrist_curl_over_a_bench",
+ "newId": "palmsdown_wrist_curl_over_a_bench",
+ "exerciseName": "Palms-down Wrist Curl Over A Bench",
+ "oldValue": "Palms-Down Wrist Curl Over A Bench",
+ "newValue": "Palms-down Wrist Curl Over A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "palmsup_barbell_wrist_curl_over_a_bench",
+ "newId": "palmsup_barbell_wrist_curl_over_a_bench",
+ "exerciseName": "Palms-up Barbell Wrist Curl Over A Bench",
+ "oldValue": "Palms-Up Barbell Wrist Curl Over A Bench",
+ "newValue": "Palms-up Barbell Wrist Curl Over A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "palmsup_dumbbell_wrist_curl_over_a_bench",
+ "newId": "palmsup_dumbbell_wrist_curl_over_a_bench",
+ "exerciseName": "Palms-up Dumbbell Wrist Curl Over A Bench",
+ "oldValue": "Palms-Up Dumbbell Wrist Curl Over A Bench",
+ "newValue": "Palms-up Dumbbell Wrist Curl Over A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "rickshaw_carry",
+ "newId": "rickshaw_carry",
+ "exerciseName": "Rickshaw Carry",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_dumbbell_palmsdown_wrist_curl",
+ "newId": "seated_dumbbell_palmsdown_wrist_curl",
+ "exerciseName": "Seated Dumbbell Palms-down Wrist Curl",
+ "oldValue": "Seated Dumbbell Palms-Down Wrist Curl",
+ "newValue": "Seated Dumbbell Palms-down Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_dumbbell_palmsup_wrist_curl",
+ "newId": "seated_dumbbell_palmsup_wrist_curl",
+ "exerciseName": "Seated Dumbbell Palms-up Wrist Curl",
+ "oldValue": "Seated Dumbbell Palms-Up Wrist Curl",
+ "newValue": "Seated Dumbbell Palms-up Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_onearm_dumbbell_palmsdown_wrist_curl",
+ "newId": "seated_onearm_dumbbell_palmsdown_wrist_curl",
+ "exerciseName": "Seated One-Arm Dumbbell Palms-down Wrist Curl",
+ "oldValue": "Seated One-Arm Dumbbell Palms-Down Wrist Curl",
+ "newValue": "Seated One-Arm Dumbbell Palms-down Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_onearm_dumbbell_palmsup_wrist_curl",
+ "newId": "seated_onearm_dumbbell_palmsup_wrist_curl",
+ "exerciseName": "Seated One-Arm Dumbbell Palms-up Wrist Curl",
+ "oldValue": "Seated One-Arm Dumbbell Palms-Up Wrist Curl",
+ "newValue": "Seated One-Arm Dumbbell Palms-up Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_palmup_barbell_wrist_curl",
+ "newId": "seated_palmup_barbell_wrist_curl",
+ "exerciseName": "Seated Palm-up Barbell Wrist Curl",
+ "oldValue": "Seated Palm-Up Barbell Wrist Curl",
+ "newValue": "Seated Palm-up Barbell Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_palmsdown_barbell_wrist_curl",
+ "newId": "seated_palmsdown_barbell_wrist_curl",
+ "exerciseName": "Seated Palms-down Barbell Wrist Curl",
+ "oldValue": "Seated Palms-Down Barbell Wrist Curl",
+ "newValue": "Seated Palms-down Barbell Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_twoarm_palmsup_lowpulley_wrist_curl",
+ "newId": "seated_twoarm_palmsup_lowpulley_wrist_curl",
+ "exerciseName": "Seated Two-Arm Palms-up Low-Pulley Wrist Curl",
+ "oldValue": "Seated Two-Arm Palms-Up Low-Pulley Wrist Curl",
+ "newValue": "Seated Two-Arm Palms-up Low-Pulley Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "standing_palmsup_barbell_behind_the_back_wrist_curl",
+ "newId": "standing_palmsup_barbell_behind_the_back_wrist_curl",
+ "exerciseName": "Standing Palms-up Barbell Behind the Back Wrist Curl",
+ "oldValue": "Standing Palms-Up Barbell Behind The Back Wrist Curl",
+ "newValue": "Standing Palms-up Barbell Behind the Back Wrist Curl",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "wrist_circles",
+ "newId": "wrist_circles",
+ "exerciseName": "Wrist Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "wrist_rotations_with_straight_bar",
+ "newId": "wrist_rotations_with_straight_bar",
+ "exerciseName": "Wrist Rotations With Straight Bar",
+ "oldValue": "Wrist Rotations with Straight Bar",
+ "newValue": "Wrist Rotations With Straight Bar",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "ankle_on_the_knee",
+ "newId": "ankle_on_the_knee",
+ "exerciseName": "Ankle on the Knee",
+ "oldValue": "Ankle On The Knee",
+ "newValue": "Ankle on the Knee",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "ankle_on_the_knee",
+ "newId": "ankle_on_the_knee",
+ "exerciseName": "Ankle on the Knee",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "butt_lift_bridge",
+ "newId": "butt_lift_bridge",
+ "exerciseName": "Butt Lift (bridge)",
+ "oldValue": "Butt Lift (Bridge)",
+ "newValue": "Butt Lift (bridge)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "downward_facing_balance",
+ "newId": "downward_facing_balance",
+ "exerciseName": "Downward Facing Balance",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "glute_kickback",
+ "newId": "glute_kickback",
+ "exerciseName": "Glute Kickback",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hip_extension_with_bands",
+ "newId": "hip_extension_with_bands",
+ "exerciseName": "Hip Extension With Bands",
+ "oldValue": "Hip Extension with Bands",
+ "newValue": "Hip Extension With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hip_lift_with_band",
+ "newId": "hip_lift_with_band",
+ "exerciseName": "Hip Lift With Band",
+ "oldValue": "Hip Lift with Band",
+ "newValue": "Hip Lift With Band",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "knee_across_the_body",
+ "newId": "knee_across_the_body",
+ "exerciseName": "Knee Across the Body",
+ "oldValue": "Knee Across The Body",
+ "newValue": "Knee Across the Body",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "knee_across_the_body",
+ "newId": "knee_across_the_body",
+ "exerciseName": "Knee Across the Body",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "kneeling_squat",
+ "newId": "kneeling_squat",
+ "exerciseName": "Kneeling Squat",
+ "oldValue": "Bodyweight",
+ "newValue": "Barbell",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lying_glute",
+ "newId": "lying_glute",
+ "exerciseName": "Lying Glute",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "one_knee_to_chest",
+ "newId": "one_knee_to_chest",
+ "exerciseName": "One Knee to Chest",
+ "oldValue": "One Knee To Chest",
+ "newValue": "One Knee to Chest",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "one_knee_to_chest",
+ "newId": "one_knee_to_chest",
+ "exerciseName": "One Knee to Chest",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "piriformissmr",
+ "newId": "piriformissmr",
+ "exerciseName": "Piriformis-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_glute",
+ "newId": "seated_glute",
+ "exerciseName": "Seated Glute",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "stepup_with_knee_raise",
+ "newId": "stepup_with_knee_raise",
+ "exerciseName": "Step-up With Knee Raise",
+ "oldValue": "Step-up with Knee Raise",
+ "newValue": "Step-up With Knee Raise",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "9090_hamstring",
+ "newId": "9090_hamstring",
+ "exerciseName": "90/90 Hamstring",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "band_good_morning_pull_through",
+ "newId": "band_good_morning_pull_through",
+ "exerciseName": "Band Good Morning (pull Through)",
+ "oldValue": "Band Good Morning (Pull Through)",
+ "newValue": "Band Good Morning (pull Through)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "box_jump_multiple_response",
+ "newId": "box_jump_multiple_response",
+ "exerciseName": "Box Jump (multiple Response)",
+ "oldValue": "Box Jump (Multiple Response)",
+ "newValue": "Box Jump (multiple Response)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "box_jump_multiple_response",
+ "newId": "box_jump_multiple_response",
+ "exerciseName": "Box Jump (multiple Response)",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chair_leg_extended_stretch",
+ "newId": "chair_leg_extended_stretch",
+ "exerciseName": "Chair Leg Extended Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "front_box_jump",
+ "newId": "front_box_jump",
+ "exerciseName": "Front Box Jump",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "glute_ham_raise",
+ "newId": "glute_ham_raise",
+ "exerciseName": "Glute Ham Raise",
+ "oldValue": "Bodyweight",
+ "newValue": "Machine",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "good_morning_off_pins",
+ "newId": "good_morning_off_pins",
+ "exerciseName": "Good Morning Off Pins",
+ "oldValue": "Good Morning off Pins",
+ "newValue": "Good Morning Off Pins",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hamstring_stretch",
+ "newId": "hamstring_stretch",
+ "exerciseName": "Hamstring Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hamstringsmr",
+ "newId": "hamstringsmr",
+ "exerciseName": "Hamstring-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hurdle_hops",
+ "newId": "hurdle_hops",
+ "exerciseName": "Hurdle Hops",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "intermediate_groin_stretch",
+ "newId": "intermediate_groin_stretch",
+ "exerciseName": "Intermediate Groin Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "legup_hamstring_stretch",
+ "newId": "legup_hamstring_stretch",
+ "exerciseName": "Leg-up Hamstring Stretch",
+ "oldValue": "Leg-Up Hamstring Stretch",
+ "newValue": "Leg-up Hamstring Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "legup_hamstring_stretch",
+ "newId": "legup_hamstring_stretch",
+ "exerciseName": "Leg-up Hamstring Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lying_hamstring",
+ "newId": "lying_hamstring",
+ "exerciseName": "Lying Hamstring",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "power_clean_from_blocks",
+ "newId": "power_clean_from_blocks",
+ "exerciseName": "Power Clean From Blocks",
+ "oldValue": "Power Clean from Blocks",
+ "newValue": "Power Clean From Blocks",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "power_stairs",
+ "newId": "power_stairs",
+ "exerciseName": "Power Stairs",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "power_stairs",
+ "newId": "power_stairs",
+ "exerciseName": "Power Stairs",
+ "oldValue": "Bodyweight",
+ "newValue": "Conditioning",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "prone_manual_hamstring",
+ "newId": "prone_manual_hamstring",
+ "exerciseName": "Prone Manual Hamstring",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "prowler_sprint",
+ "newId": "prowler_sprint",
+ "exerciseName": "Prowler Sprint",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "reverse_hyperextension",
+ "newId": "reverse_hyperextension",
+ "exerciseName": "Reverse Hyperextension",
+ "oldValue": "Bodyweight",
+ "newValue": "Machine",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "romanian_deadlift_from_deficit",
+ "newId": "romanian_deadlift_from_deficit",
+ "exerciseName": "Romanian Deadlift From Deficit",
+ "oldValue": "Romanian Deadlift from Deficit",
+ "newValue": "Romanian Deadlift From Deficit",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "runners_stretch",
+ "newId": "runners_stretch",
+ "exerciseName": "Runner's Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_floor_hamstring_stretch",
+ "newId": "seated_floor_hamstring_stretch",
+ "exerciseName": "Seated Floor Hamstring Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_hamstring",
+ "newId": "seated_hamstring",
+ "exerciseName": "Seated Hamstring",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "seated_hamstring_and_calf_stretch",
+ "newId": "seated_hamstring_and_calf_stretch",
+ "exerciseName": "Seated Hamstring and Calf Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_hamstring_and_calf_stretch",
+ "newId": "standing_hamstring_and_calf_stretch",
+ "exerciseName": "Standing Hamstring and Calf Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "sumo_deadlift_with_bands",
+ "newId": "sumo_deadlift_with_bands",
+ "exerciseName": "Sumo Deadlift With Bands",
+ "oldValue": "Sumo Deadlift with Bands",
+ "newValue": "Sumo Deadlift With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "sumo_deadlift_with_chains",
+ "newId": "sumo_deadlift_with_chains",
+ "exerciseName": "Sumo Deadlift With Chains",
+ "oldValue": "Sumo Deadlift with Chains",
+ "newValue": "Sumo Deadlift With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "the_straddle",
+ "newId": "the_straddle",
+ "exerciseName": "the Straddle",
+ "oldValue": "The Straddle",
+ "newValue": "the Straddle",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "worlds_greatest_stretch",
+ "newId": "worlds_greatest_stretch",
+ "exerciseName": "World's Greatest Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "band_assisted_pullup",
+ "newId": "band_assisted_pullup",
+ "exerciseName": "Band Assisted Pull-up",
+ "oldValue": "Band Assisted Pull-Up",
+ "newValue": "Band Assisted Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "band_assisted_pullup",
+ "newId": "band_assisted_pullup",
+ "exerciseName": "Band Assisted Pull-up",
+ "oldValue": "Bodyweight",
+ "newValue": "Band",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chair_lower_back_stretch",
+ "newId": "chair_lower_back_stretch",
+ "exerciseName": "Chair Lower Back Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chinup",
+ "newId": "chinup",
+ "exerciseName": "Chin-up",
+ "oldValue": "Chin-Up",
+ "newValue": "Chin-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "dynamic_back_stretch",
+ "newId": "dynamic_back_stretch",
+ "exerciseName": "Dynamic Back Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "full_rangeofmotion_lat_pulldown",
+ "newId": "full_rangeofmotion_lat_pulldown",
+ "exerciseName": "Full Range-of-Motion Lat Pulldown",
+ "oldValue": "Full Range-Of-Motion Lat Pulldown",
+ "newValue": "Full Range-of-Motion Lat Pulldown",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "kipping_muscle_up",
+ "newId": "kipping_muscle_up",
+ "exerciseName": "Kipping Muscle up",
+ "oldValue": "Kipping Muscle Up",
+ "newValue": "Kipping Muscle up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "latissimus_dorsismr",
+ "newId": "latissimus_dorsismr",
+ "exerciseName": "Latissimus Dorsi-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "muscle_up",
+ "newId": "muscle_up",
+ "exerciseName": "Muscle up",
+ "oldValue": "Muscle Up",
+ "newValue": "Muscle up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "overhead_lat",
+ "newId": "overhead_lat",
+ "exerciseName": "Overhead Lat",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "pullups",
+ "newId": "pullups",
+ "exerciseName": "Pull-up",
+ "oldValue": "Pullups",
+ "newValue": "Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "rope_climb",
+ "newId": "rope_climb",
+ "exerciseName": "Rope Climb",
+ "oldValue": "Bodyweight",
+ "newValue": "Conditioning",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "side_to_side_chins",
+ "newId": "side_to_side_chins",
+ "exerciseName": "Side to Side Chins",
+ "oldValue": "Side To Side Chins",
+ "newValue": "Side to Side Chins",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "sidelying_floor_stretch",
+ "newId": "sidelying_floor_stretch",
+ "exerciseName": "Side-Lying Floor Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "vbar_pullup",
+ "newId": "vbar_pullup",
+ "exerciseName": "V-Bar Pull-up",
+ "oldValue": "V-Bar Pullup",
+ "newValue": "V-Bar Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "weighted_pull_ups",
+ "newId": "weighted_pull_ups",
+ "exerciseName": "Weighted Pull-up",
+ "oldValue": "Weighted Pull Ups",
+ "newValue": "Weighted Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "widegrip_pulldown_behind_the_neck",
+ "newId": "widegrip_pulldown_behind_the_neck",
+ "exerciseName": "Wide-Grip Pulldown Behind the Neck",
+ "oldValue": "Wide-Grip Pulldown Behind The Neck",
+ "newValue": "Wide-Grip Pulldown Behind the Neck",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "widegrip_rear_pullup",
+ "newId": "widegrip_rear_pullup",
+ "exerciseName": "Wide-Grip Rear Pull-up",
+ "oldValue": "Wide-Grip Rear Pull-Up",
+ "newValue": "Wide-Grip Rear Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "cat_stretch",
+ "newId": "cat_stretch",
+ "exerciseName": "Cat Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "childs_pose",
+ "newId": "childs_pose",
+ "exerciseName": "Child's Pose",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "dancers_stretch",
+ "newId": "dancers_stretch",
+ "exerciseName": "Dancer's Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "deadlift_with_bands",
+ "newId": "deadlift_with_bands",
+ "exerciseName": "Deadlift With Bands",
+ "oldValue": "Deadlift with Bands",
+ "newValue": "Deadlift With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "deadlift_with_chains",
+ "newId": "deadlift_with_chains",
+ "exerciseName": "Deadlift With Chains",
+ "oldValue": "Deadlift with Chains",
+ "newValue": "Deadlift With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hug_a_ball",
+ "newId": "hug_a_ball",
+ "exerciseName": "Hug A Ball",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hug_knees_to_chest",
+ "newId": "hug_knees_to_chest",
+ "exerciseName": "Hug Knees to Chest",
+ "oldValue": "Hug Knees To Chest",
+ "newValue": "Hug Knees to Chest",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "hug_knees_to_chest",
+ "newId": "hug_knees_to_chest",
+ "exerciseName": "Hug Knees to Chest",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hyperextensions_back_extensions",
+ "newId": "hyperextensions_back_extensions",
+ "exerciseName": "Hyperextensions (back Extensions)",
+ "oldValue": "Hyperextensions (Back Extensions)",
+ "newValue": "Hyperextensions (back Extensions)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "hyperextensions_back_extensions",
+ "newId": "hyperextensions_back_extensions",
+ "exerciseName": "Hyperextensions (back Extensions)",
+ "oldValue": "Bodyweight",
+ "newValue": "Machine",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lower_backsmr",
+ "newId": "lower_backsmr",
+ "exerciseName": "Lower Back-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "pyramid",
+ "newId": "pyramid",
+ "exerciseName": "Pyramid",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "rack_pull_with_bands",
+ "newId": "rack_pull_with_bands",
+ "exerciseName": "Rack Pull With Bands",
+ "oldValue": "Rack Pull with Bands",
+ "newValue": "Rack Pull With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "rack_pulls",
+ "newId": "rack_pulls",
+ "exerciseName": "Rack Pull",
+ "oldValue": "Rack Pulls",
+ "newValue": "Rack Pull",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_good_mornings",
+ "newId": "seated_good_mornings",
+ "exerciseName": "Seated Good Morning",
+ "oldValue": "Seated Good Mornings",
+ "newValue": "Seated Good Morning",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_pelvic_tilt",
+ "newId": "standing_pelvic_tilt",
+ "exerciseName": "Standing Pelvic Tilt",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "inverted_row_with_straps",
+ "newId": "inverted_row_with_straps",
+ "exerciseName": "Inverted Row With Straps",
+ "oldValue": "Inverted Row with Straps",
+ "newValue": "Inverted Row With Straps",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "middle_back_stretch",
+ "newId": "middle_back_stretch",
+ "exerciseName": "Middle Back Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "one_arm_chinup",
+ "newId": "one_arm_chinup",
+ "exerciseName": "One Arm Chin-up",
+ "oldValue": "One Arm Chin-Up",
+ "newValue": "One Arm Chin-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "rhomboidssmr",
+ "newId": "rhomboidssmr",
+ "exerciseName": "Rhomboids-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_cable_rows",
+ "newId": "seated_cable_rows",
+ "exerciseName": "Seated Cable Row",
+ "oldValue": "Seated Cable Rows",
+ "newValue": "Seated Cable Row",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seated_onearm_cable_pulley_rows",
+ "newId": "seated_onearm_cable_pulley_rows",
+ "exerciseName": "Seated One-Arm Cable Pulley Rows",
+ "oldValue": "Seated One-arm Cable Pulley Rows",
+ "newValue": "Seated One-Arm Cable Pulley Rows",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "spinal_stretch",
+ "newId": "spinal_stretch",
+ "exerciseName": "Spinal Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "tbar_row_with_handle",
+ "newId": "tbar_row_with_handle",
+ "exerciseName": "T-Bar Row With Handle",
+ "oldValue": "T-Bar Row with Handle",
+ "newValue": "T-Bar Row With Handle",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "upper_back_stretch",
+ "newId": "upper_back_stretch",
+ "exerciseName": "Upper Back Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "chin_to_chest_stretch",
+ "newId": "chin_to_chest_stretch",
+ "exerciseName": "Chin to Chest Stretch",
+ "oldValue": "Chin To Chest Stretch",
+ "newValue": "Chin to Chest Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chin_to_chest_stretch",
+ "newId": "chin_to_chest_stretch",
+ "exerciseName": "Chin to Chest Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "isometric_neck_exercise__front_and_back",
+ "newId": "isometric_neck_exercise__front_and_back",
+ "exerciseName": "Isometric Neck Exercise - Front and Back",
+ "oldValue": "Isometric Neck Exercise - Front And Back",
+ "newValue": "Isometric Neck Exercise - Front and Back",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "isometric_neck_exercise__front_and_back",
+ "newId": "isometric_neck_exercise__front_and_back",
+ "exerciseName": "Isometric Neck Exercise - Front and Back",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "isometric_neck_exercise__sides",
+ "newId": "isometric_neck_exercise__sides",
+ "exerciseName": "Isometric Neck Exercise - Sides",
+ "oldValue": "duration",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "lying_face_down_plate_neck_resistance",
+ "newId": "lying_face_down_plate_neck_resistance",
+ "exerciseName": "Lying Face down Plate Neck Resistance",
+ "oldValue": "Lying Face Down Plate Neck Resistance",
+ "newValue": "Lying Face down Plate Neck Resistance",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "lying_face_up_plate_neck_resistance",
+ "newId": "lying_face_up_plate_neck_resistance",
+ "exerciseName": "Lying Face up Plate Neck Resistance",
+ "oldValue": "Lying Face Up Plate Neck Resistance",
+ "newValue": "Lying Face up Plate Neck Resistance",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "necksmr",
+ "newId": "necksmr",
+ "exerciseName": "Neck-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "side_neck_stretch",
+ "newId": "side_neck_stretch",
+ "exerciseName": "Side Neck Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "all_fours_quad_stretch",
+ "newId": "all_fours_quad_stretch",
+ "exerciseName": "All Fours Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "alternate_leg_diagonal_bound",
+ "newId": "alternate_leg_diagonal_bound",
+ "exerciseName": "Alternate Leg Diagonal Bound",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "backward_drag",
+ "newId": "backward_drag",
+ "exerciseName": "Backward Drag",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_hack_squat",
+ "newId": "longhaul_hack_squat_barbell",
+ "exerciseName": "Hack Squat - Barbell",
+ "oldValue": "barbell_hack_squat",
+ "newValue": "longhaul_hack_squat_barbell",
+ "impact": "workout_logs",
+ "mitigatedBy": "idMigrationMap",
+ "reason": "Old app ID maps to a canonical v2 exercise ID."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_hack_squat",
+ "newId": "longhaul_hack_squat_barbell",
+ "exerciseName": "Hack Squat - Barbell",
+ "oldValue": "Barbell Hack Squat",
+ "newValue": "Hack Squat - Barbell",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_squat_to_a_bench",
+ "newId": "barbell_squat_to_a_bench",
+ "exerciseName": "Barbell Squat to A Bench",
+ "oldValue": "Barbell Squat To A Bench",
+ "newValue": "Barbell Squat to A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "barbell_walking_lunge",
+ "newId": "barbell_walking_lunge",
+ "exerciseName": "Barbell Walking Lunge",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "bear_crawl_sled_drags",
+ "newId": "bear_crawl_sled_drags",
+ "exerciseName": "Bear Crawl Sled Drags",
+ "oldValue": "duration_distance",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "bench_sprint",
+ "newId": "bench_sprint",
+ "exerciseName": "Bench Sprint",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "bodyweight_walking_lunge",
+ "newId": "bodyweight_walking_lunge",
+ "exerciseName": "Bodyweight Walking Lunge",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "box_squat_with_bands",
+ "newId": "box_squat_with_bands",
+ "exerciseName": "Box Squat With Bands",
+ "oldValue": "Box Squat with Bands",
+ "newValue": "Box Squat With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "box_squat_with_chains",
+ "newId": "box_squat_with_chains",
+ "exerciseName": "Box Squat With Chains",
+ "oldValue": "Box Squat with Chains",
+ "newValue": "Box Squat With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "clean_from_blocks",
+ "newId": "clean_from_blocks",
+ "exerciseName": "Clean From Blocks",
+ "oldValue": "Clean from Blocks",
+ "newValue": "Clean From Blocks",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "conans_wheel",
+ "newId": "conans_wheel",
+ "exerciseName": "Conan's Wheel",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "dumbbell_seated_box_jump",
+ "newId": "dumbbell_seated_box_jump",
+ "exerciseName": "Dumbbell Seated Box Jump",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "dumbbell_squat_to_a_bench",
+ "newId": "dumbbell_squat_to_a_bench",
+ "exerciseName": "Dumbbell Squat to A Bench",
+ "oldValue": "Dumbbell Squat To A Bench",
+ "newValue": "Dumbbell Squat to A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "dumbbell_step_ups",
+ "newId": "dumbbell_step_ups",
+ "exerciseName": "Dumbbell Step-Up",
+ "oldValue": "Dumbbell Step Ups",
+ "newValue": "Dumbbell Step-Up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "frog_hops",
+ "newId": "frog_hops",
+ "exerciseName": "Frog Hops",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "front_barbell_squat_to_a_bench",
+ "newId": "front_barbell_squat_to_a_bench",
+ "exerciseName": "Front Barbell Squat to A Bench",
+ "oldValue": "Front Barbell Squat To A Bench",
+ "newValue": "Front Barbell Squat to A Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "front_cone_hops_or_hurdle_hops",
+ "newId": "front_cone_hops_or_hurdle_hops",
+ "exerciseName": "Front Cone Hops (or Hurdle Hops)",
+ "oldValue": "Front Cone Hops (or hurdle hops)",
+ "newValue": "Front Cone Hops (or Hurdle Hops)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "front_cone_hops_or_hurdle_hops",
+ "newId": "front_cone_hops_or_hurdle_hops",
+ "exerciseName": "Front Cone Hops (or Hurdle Hops)",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "front_squat_clean_grip",
+ "newId": "front_squat_clean_grip",
+ "exerciseName": "Front Squat (clean Grip)",
+ "oldValue": "Front Squat (Clean Grip)",
+ "newValue": "Front Squat (clean Grip)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "hip_flexion_with_band",
+ "newId": "hip_flexion_with_band",
+ "exerciseName": "Hip Flexion With Band",
+ "oldValue": "Hip Flexion with Band",
+ "newValue": "Hip Flexion With Band",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "intermediate_hip_flexor_and_quad_stretch",
+ "newId": "intermediate_hip_flexor_and_quad_stretch",
+ "exerciseName": "Intermediate Hip Flexor and Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "iron_crosses_stretch",
+ "newId": "iron_crosses_stretch",
+ "exerciseName": "Iron Crosses (stretch)",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "leg_extensions",
+ "newId": "leg_extensions",
+ "exerciseName": "Leg Extension",
+ "oldValue": "Leg Extensions",
+ "newValue": "Leg Extension",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "looking_at_ceiling",
+ "newId": "looking_at_ceiling",
+ "exerciseName": "Looking At Ceiling",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lunge_sprint",
+ "newId": "lunge_sprint",
+ "exerciseName": "Lunge Sprint",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "lying_prone_quadriceps",
+ "newId": "lying_prone_quadriceps",
+ "exerciseName": "Lying Prone Quadriceps",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "mountain_climbers",
+ "newId": "mountain_climbers",
+ "exerciseName": "Mountain Climber",
+ "oldValue": "Mountain Climbers",
+ "newValue": "Mountain Climber",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "on_your_side_quad_stretch",
+ "newId": "on_your_side_quad_stretch",
+ "exerciseName": "on Your Side Quad Stretch",
+ "oldValue": "On Your Side Quad Stretch",
+ "newValue": "on Your Side Quad Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "on_your_side_quad_stretch",
+ "newId": "on_your_side_quad_stretch",
+ "exerciseName": "on Your Side Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "onyourback_quad_stretch",
+ "newId": "onyourback_quad_stretch",
+ "exerciseName": "on-Your-Back Quad Stretch",
+ "oldValue": "On-Your-Back Quad Stretch",
+ "newValue": "on-Your-Back Quad Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "onyourback_quad_stretch",
+ "newId": "onyourback_quad_stretch",
+ "exerciseName": "on-Your-Back Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "power_snatch_from_blocks",
+ "newId": "power_snatch_from_blocks",
+ "exerciseName": "Power Snatch From Blocks",
+ "oldValue": "Power Snatch from Blocks",
+ "newValue": "Power Snatch From Blocks",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "quad_stretch",
+ "newId": "quad_stretch",
+ "exerciseName": "Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "quadricepssmr",
+ "newId": "quadricepssmr",
+ "exerciseName": "Quadriceps-SMR",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "rope_jumping",
+ "newId": "rope_jumping",
+ "exerciseName": "Rope Jumping",
+ "oldValue": "Bodyweight",
+ "newValue": "Conditioning",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "side_hopsprint",
+ "newId": "side_hopsprint",
+ "exerciseName": "Side Hop-Sprint",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "single_leg_pushoff",
+ "newId": "single_leg_pushoff",
+ "exerciseName": "Single Leg Push-Off",
+ "oldValue": "Single Leg Push-off",
+ "newValue": "Single Leg Push-Off",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "singlecone_sprint_drill",
+ "newId": "singlecone_sprint_drill",
+ "exerciseName": "Single-Cone Sprint Drill",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "singleleg_high_box_squat",
+ "newId": "singleleg_high_box_squat",
+ "exerciseName": "Single-Leg High Box Squat",
+ "oldValue": "Bodyweight",
+ "newValue": "Barbell",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "singleleg_hop_progression",
+ "newId": "singleleg_hop_progression",
+ "exerciseName": "Single-Leg Hop Progression",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "singleleg_lateral_hop",
+ "newId": "singleleg_lateral_hop",
+ "exerciseName": "Single-Leg Lateral Hop",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "sled_drag__harness",
+ "newId": "sled_drag__harness",
+ "exerciseName": "Sled Drag - Harness",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "sled_push",
+ "newId": "sled_push",
+ "exerciseName": "Sled Push",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "snatch_from_blocks",
+ "newId": "snatch_from_blocks",
+ "exerciseName": "Snatch From Blocks",
+ "oldValue": "Snatch from Blocks",
+ "newValue": "Snatch From Blocks",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "split_squat_with_dumbbells",
+ "newId": "split_squat_with_dumbbells",
+ "exerciseName": "Split Squat With Dumbbells",
+ "oldValue": "Split Squat with Dumbbells",
+ "newValue": "Split Squat With Dumbbells",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "squat_with_bands",
+ "newId": "squat_with_bands",
+ "exerciseName": "Squat With Bands",
+ "oldValue": "Squat with Bands",
+ "newValue": "Squat With Bands",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "squat_with_chains",
+ "newId": "squat_with_chains",
+ "exerciseName": "Squat With Chains",
+ "oldValue": "Squat with Chains",
+ "newValue": "Squat With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "squat_with_plate_movers",
+ "newId": "squat_with_plate_movers",
+ "exerciseName": "Squat With Plate Movers",
+ "oldValue": "Squat with Plate Movers",
+ "newValue": "Squat With Plate Movers",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "standing_elevated_quad_stretch",
+ "newId": "standing_elevated_quad_stretch",
+ "exerciseName": "Standing Elevated Quad Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "suspended_split_squat",
+ "newId": "suspended_split_squat",
+ "exerciseName": "Suspended Split Squat",
+ "oldValue": "Bodyweight",
+ "newValue": "Barbell",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "zercher_squats",
+ "newId": "zercher_squats",
+ "exerciseName": "Zercher Squat",
+ "oldValue": "Zercher Squats",
+ "newValue": "Zercher Squat",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "arm_circles",
+ "newId": "arm_circles",
+ "exerciseName": "Arm Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_rear_delt_row",
+ "newId": "longhaul_rear_delt_row_barbell",
+ "exerciseName": "Rear Delt Row - Barbell",
+ "oldValue": "barbell_rear_delt_row",
+ "newValue": "longhaul_rear_delt_row_barbell",
+ "impact": "workout_logs",
+ "mitigatedBy": "idMigrationMap",
+ "reason": "Old app ID maps to a canonical v2 exercise ID."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_rear_delt_row",
+ "newId": "longhaul_rear_delt_row_barbell",
+ "exerciseName": "Rear Delt Row - Barbell",
+ "oldValue": "Barbell Rear Delt Row",
+ "newValue": "Rear Delt Row - Barbell",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "battling_ropes",
+ "newId": "battling_ropes",
+ "exerciseName": "Battling Ropes",
+ "oldValue": "duration_distance",
+ "newValue": "weight_reps",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "bent_over_dumbbell_rear_delt_raise_with_head_on_bench",
+ "newId": "bent_over_dumbbell_rear_delt_raise_with_head_on_bench",
+ "exerciseName": "Bent Over Dumbbell Rear Delt Raise With Head on Bench",
+ "oldValue": "Bent Over Dumbbell Rear Delt Raise With Head On Bench",
+ "newValue": "Bent Over Dumbbell Rear Delt Raise With Head on Bench",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "chair_upper_body_stretch",
+ "newId": "chair_upper_body_stretch",
+ "exerciseName": "Chair Upper Body Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "elbow_circles",
+ "newId": "elbow_circles",
+ "exerciseName": "Elbow Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "external_rotation",
+ "newId": "external_rotation",
+ "exerciseName": "External Rotation",
+ "oldValue": "Bodyweight",
+ "newValue": "Band",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "external_rotation_with_band",
+ "newId": "external_rotation_with_band",
+ "exerciseName": "External Rotation With Band",
+ "oldValue": "External Rotation with Band",
+ "newValue": "External Rotation With Band",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "external_rotation_with_cable",
+ "newId": "external_rotation_with_cable",
+ "exerciseName": "External Rotation With Cable",
+ "oldValue": "External Rotation with Cable",
+ "newValue": "External Rotation With Cable",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "internal_rotation_with_band",
+ "newId": "internal_rotation_with_band",
+ "exerciseName": "Internal Rotation With Band",
+ "oldValue": "Internal Rotation with Band",
+ "newValue": "Internal Rotation With Band",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "kettlebell_turkish_getup_lunge_style",
+ "newId": "kettlebell_turkish_getup_lunge_style",
+ "exerciseName": "Kettlebell Turkish Get-up (lunge Style)",
+ "oldValue": "Kettlebell Turkish Get-Up (Lunge style)",
+ "newValue": "Kettlebell Turkish Get-up (lunge Style)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "kettlebell_turkish_getup_squat_style",
+ "newId": "kettlebell_turkish_getup_squat_style",
+ "exerciseName": "Kettlebell Turkish Get-up (squat Style)",
+ "oldValue": "Kettlebell Turkish Get-Up (Squat style)",
+ "newValue": "Kettlebell Turkish Get-up (squat Style)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "low_pulley_row_to_neck",
+ "newId": "low_pulley_row_to_neck",
+ "exerciseName": "Low Pulley Row to Neck",
+ "oldValue": "Low Pulley Row To Neck",
+ "newValue": "Low Pulley Row to Neck",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "machine_shoulder_military_press",
+ "newId": "machine_shoulder_military_press",
+ "exerciseName": "Machine Shoulder (military) Press",
+ "oldValue": "Machine Shoulder (Military) Press",
+ "newValue": "Machine Shoulder (military) Press",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "onearm_kettlebell_military_press_to_the_side",
+ "newId": "onearm_kettlebell_military_press_to_the_side",
+ "exerciseName": "One-Arm Kettlebell Military Press to the Side",
+ "oldValue": "One-Arm Kettlebell Military Press To The Side",
+ "newValue": "One-Arm Kettlebell Military Press to the Side",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "return_push_from_stance",
+ "newId": "return_push_from_stance",
+ "exerciseName": "Return Push From Stance",
+ "oldValue": "Return Push from Stance",
+ "newValue": "Return Push From Stance",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "round_the_world_shoulder_stretch",
+ "newId": "round_the_world_shoulder_stretch",
+ "exerciseName": "Round the World Shoulder Stretch",
+ "oldValue": "Round The World Shoulder Stretch",
+ "newValue": "Round the World Shoulder Stretch",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "round_the_world_shoulder_stretch",
+ "newId": "round_the_world_shoulder_stretch",
+ "exerciseName": "Round the World Shoulder Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "seesaw_press_alternating_side_press",
+ "newId": "seesaw_press_alternating_side_press",
+ "exerciseName": "See-Saw Press (alternating Side Press)",
+ "oldValue": "See-Saw Press (Alternating Side Press)",
+ "newValue": "See-Saw Press (alternating Side Press)",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "shoulder_circles",
+ "newId": "shoulder_circles",
+ "exerciseName": "Shoulder Circles",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "shoulder_stretch",
+ "newId": "shoulder_stretch",
+ "exerciseName": "Shoulder Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "side_wrist_pull",
+ "newId": "side_wrist_pull",
+ "exerciseName": "Side Wrist Pull",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "sled_overhead_backward_walk",
+ "newId": "sled_overhead_backward_walk",
+ "exerciseName": "Sled Overhead Backward Walk",
+ "oldValue": "weight_reps",
+ "newValue": "duration_distance",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "upward_stretch",
+ "newId": "upward_stretch",
+ "exerciseName": "Upward Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "barbell_shrug_behind_the_back",
+ "newId": "barbell_shrug_behind_the_back",
+ "exerciseName": "Barbell Shrug Behind the Back",
+ "oldValue": "Barbell Shrug Behind The Back",
+ "newValue": "Barbell Shrug Behind the Back",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "cable_shrugs",
+ "newId": "cable_shrugs",
+ "exerciseName": "Cable Shrug",
+ "oldValue": "Cable Shrugs",
+ "newValue": "Cable Shrug",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "scapular_pullup",
+ "newId": "scapular_pullup",
+ "exerciseName": "Scapular Pull-up",
+ "oldValue": "Scapular Pull-Up",
+ "newValue": "Scapular Pull-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "bench_press_with_chains",
+ "newId": "bench_press_with_chains",
+ "exerciseName": "Bench Press With Chains",
+ "oldValue": "Bench Press with Chains",
+ "newValue": "Bench Press With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "bodyup",
+ "newId": "bodyup",
+ "exerciseName": "Body-up",
+ "oldValue": "Body-Up",
+ "newValue": "Body-up",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "closegrip_pushup_off_of_a_dumbbell",
+ "newId": "closegrip_pushup_off_of_a_dumbbell",
+ "exerciseName": "Close-Grip Push-up Off of A Dumbbell",
+ "oldValue": "Close-Grip Push-Up off of a Dumbbell",
+ "newValue": "Close-Grip Push-up Off of A Dumbbell",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "closegrip_pushup_off_of_a_dumbbell",
+ "newId": "closegrip_pushup_off_of_a_dumbbell",
+ "exerciseName": "Close-Grip Push-up Off of A Dumbbell",
+ "oldValue": "Bodyweight",
+ "newValue": "Dumbbell",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "decline_closegrip_bench_to_skull_crusher",
+ "newId": "decline_closegrip_bench_to_skull_crusher",
+ "exerciseName": "Decline Close-Grip Bench to Skull Crusher",
+ "oldValue": "Decline Close-Grip Bench To Skull Crusher",
+ "newValue": "Decline Close-Grip Bench to Skull Crusher",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "floor_press_with_chains",
+ "newId": "floor_press_with_chains",
+ "exerciseName": "Floor Press With Chains",
+ "oldValue": "Floor Press with Chains",
+ "newValue": "Floor Press With Chains",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "incline_pushup_closegrip",
+ "newId": "incline_pushup_closegrip",
+ "exerciseName": "Incline Push-up Close-Grip",
+ "oldValue": "Incline Push-Up Close-Grip",
+ "newValue": "Incline Push-up Close-Grip",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "lying_closegrip_barbell_triceps_extension_behind_the_head",
+ "newId": "lying_closegrip_barbell_triceps_extension_behind_the_head",
+ "exerciseName": "Lying Close-Grip Barbell Triceps Extension Behind the Head",
+ "oldValue": "Lying Close-Grip Barbell Triceps Extension Behind The Head",
+ "newValue": "Lying Close-Grip Barbell Triceps Extension Behind the Head",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "lying_closegrip_barbell_triceps_press_to_chin",
+ "newId": "lying_closegrip_barbell_triceps_press_to_chin",
+ "exerciseName": "Lying Close-Grip Barbell Triceps Press to Chin",
+ "oldValue": "Lying Close-Grip Barbell Triceps Press To Chin",
+ "newValue": "Lying Close-Grip Barbell Triceps Press to Chin",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "tricep_side_stretch",
+ "newId": "tricep_side_stretch",
+ "exerciseName": "Tricep Side Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "triceps_overhead_extension_with_rope",
+ "newId": "triceps_overhead_extension_with_rope",
+ "exerciseName": "Triceps Overhead Extension With Rope",
+ "oldValue": "Triceps Overhead Extension with Rope",
+ "newValue": "Triceps Overhead Extension With Rope",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "tracking_type_changed",
+ "oldId": "triceps_stretch",
+ "newId": "triceps_stretch",
+ "exerciseName": "Triceps Stretch",
+ "oldValue": "weight_reps",
+ "newValue": "duration",
+ "impact": "workout_logs",
+ "mitigatedBy": "none",
+ "reason": "v2 infers tracking from verified category/equipment/movement metadata."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "longhaul_close_grip_feet_up_bench_press_barbell",
+ "newId": "longhaul_close_grip_feet_up_bench_press_barbell",
+ "exerciseName": "Close-Grip Feet-up Bench Press - Barbell",
+ "oldValue": "Close-Grip Feet-Up Bench Press - Barbell",
+ "newValue": "Close-Grip Feet-up Bench Press - Barbell",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "longhaul_hack_squat_landmine",
+ "newId": "longhaul_hack_squat_landmine",
+ "exerciseName": "Hack Squat - Landmine",
+ "oldValue": "Barbell",
+ "newValue": "Machine",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "longhaul_pull_apart_band",
+ "newId": "band_pull_apart",
+ "exerciseName": "Band Pull Apart",
+ "oldValue": "longhaul_pull_apart_band",
+ "newValue": "band_pull_apart",
+ "impact": "workout_logs",
+ "mitigatedBy": "idMigrationMap",
+ "reason": "Old app ID maps to a canonical v2 exercise ID."
+ },
+ {
+ "type": "id_renamed",
+ "oldId": "longhaul_pull_apart_band",
+ "newId": "band_pull_apart",
+ "exerciseName": "Band Pull Apart",
+ "oldValue": "Pull-Apart - Band",
+ "newValue": "Band Pull Apart",
+ "impact": "search",
+ "mitigatedBy": "alias",
+ "reason": "Display name canonicalized; old name is retained as an alias where the record is present."
+ },
+ {
+ "type": "equipment_value_changed",
+ "oldId": "longhaul_squat_belt",
+ "newId": "longhaul_squat_belt",
+ "exerciseName": "Squat - Belt",
+ "oldValue": "Other",
+ "newValue": "Barbell",
+ "impact": "filter_counts",
+ "mitigatedBy": "none",
+ "reason": "v2 separates simplified equipment from detailed equipment."
+ }
+ ],
+ "validationReport": {
+ "totalExercises": 1731,
+ "withPrimaryMuscle": 1731,
+ "withEquipment": 1731,
+ "withEquipmentDetail": 1731,
+ "withTrackingType": 1731,
+ "withIsBodyweight": 1731,
+ "withRequiresExternalLoad": 1731,
+ "withMovementPattern": 1731,
+ "withDifficulty": 1731,
+ "withAliases": 1731,
+ "withSecondaryMuscles": 1731,
+ "idCollisions": 0,
+ "nameCollisions": 0,
+ "invalidEquipmentValues": [],
+ "invalidEquipmentDetailValues": [],
+ "invalidTrackingTypeValues": [],
+ "invalidMuscleValues": [],
+ "invalidCategoryValues": [],
+ "invalidMovementPatternValues": [],
+ "invalidDifficultyValues": [],
+ "exercisesWithNullId": [],
+ "exercisesWithNullName": [],
+ "oldIdsNotInMigrationMap": [],
+ "allOldIdsAccountedFor": true,
+ "manualReviewRemaining": 0,
+ "manualReviewRemainingItems": [],
+ "sourceVerificationComplete": true
+ },
+ "smokeTestSamples": [
+ {
+ "id": "bench_press__powerlifting",
+ "name": "Bench Press - Powerlifting",
+ "primaryMuscle": "Triceps",
+ "primaryMuscles": [
+ "Triceps"
+ ],
+ "secondaryMuscles": [
+ "Chest",
+ "Shoulders",
+ "Abdominals"
+ ],
+ "equipment": "Barbell",
+ "equipmentDetail": "Barbell",
+ "apparatus": [
+ "Barbell",
+ "Bench"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "push",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "pullups",
+ "name": "Pull-up",
+ "primaryMuscle": "Lats",
+ "primaryMuscles": [
+ "Lats"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Middle back"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Pull-Up Bar",
+ "apparatus": [
+ "Pull-Up Bar"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "pull",
+ "difficulty": "intermediate",
+ "aliases": [
+ "Pullups"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "duplicate_candidate"
+ ]
+ },
+ {
+ "id": "seated_cable_rows",
+ "name": "Seated Cable Row",
+ "primaryMuscle": "Middle back",
+ "primaryMuscles": [
+ "Middle back"
+ ],
+ "secondaryMuscles": [
+ "Biceps",
+ "Forearms",
+ "Shoulders",
+ "Abdominals",
+ "Lats",
+ "Traps"
+ ],
+ "equipment": "Cable",
+ "equipmentDetail": "Cable",
+ "apparatus": [
+ "Cable Machine"
+ ],
+ "trackingType": "weight_reps",
+ "category": "strength",
+ "isBodyweight": false,
+ "requiresExternalLoad": true,
+ "movementPattern": "pull",
+ "difficulty": "beginner",
+ "aliases": [
+ "Cable Row",
+ "Seated Cable Rows"
+ ],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "running_treadmill",
+ "name": "Running, Treadmill",
+ "primaryMuscle": "Quadriceps",
+ "primaryMuscles": [
+ "Quadriceps"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Hamstrings",
+ "Adductors",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "locomotion",
+ "difficulty": "intermediate",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "worlds_greatest_stretch",
+ "name": "World's Greatest Stretch",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Lower back",
+ "Middle back",
+ "Abdominals"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration",
+ "category": "mobility",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "beginner",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ },
+ {
+ "id": "air_bike",
+ "name": "Bicycle Crunch",
+ "primaryMuscle": "Abdominals",
+ "primaryMuscles": [
+ "Abdominals"
+ ],
+ "secondaryMuscles": [],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Bodyweight",
+ "apparatus": [
+ "Floor"
+ ],
+ "trackingType": "duration_distance",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "rotation",
+ "difficulty": "beginner",
+ "aliases": [
+ "Air Bike",
+ "Supine Bicycle Crunch"
+ ],
+ "sourceTags": [
+ "added_missing_exercise",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern",
+ "source_ace"
+ ]
+ },
+ {
+ "id": "nordic_hamstring_curl",
+ "name": "Nordic Hamstring Curl",
+ "primaryMuscle": "Hamstrings",
+ "primaryMuscles": [
+ "Hamstrings"
+ ],
+ "secondaryMuscles": [
+ "Glutes",
+ "Calves"
+ ],
+ "equipment": "Bodyweight",
+ "equipmentDetail": "Rings",
+ "apparatus": [
+ "Rings"
+ ],
+ "trackingType": "weight_reps",
+ "category": "bodyweight",
+ "isBodyweight": true,
+ "requiresExternalLoad": false,
+ "movementPattern": "hinge",
+ "difficulty": "advanced",
+ "aliases": [],
+ "sourceTags": [
+ "existing_ironlog",
+ "taxonomy_verified_local",
+ "verified_equipment",
+ "verified_primary_muscle",
+ "verified_secondary_muscles",
+ "verified_movement_pattern"
+ ]
+ }
+ ]
+}
diff --git a/app/src/main/assets/ironlog/body_map_paths.json b/app/src/main/assets/ironlog/body_map_paths.json
new file mode 100644
index 0000000..85be820
--- /dev/null
+++ b/app/src/main/assets/ironlog/body_map_paths.json
@@ -0,0 +1 @@
+{"VIEW_BOXES":{"male":{"front":{"x":-20,"y":95,"width":740,"height":1300},"back":{"x":740,"y":95,"width":680,"height":1320}}},"MUSCLE_MAP":{"chest":["chest","upperChest","lowerChest","serratus"],"back":["upperBack","lowerBack","trapezius","rhomboids"],"shoulders":["deltoids","frontDeltoid","rotatorCuff"],"rearDelts":["rearDeltoid"],"arms":["biceps","triceps","forearm","hands"],"core":["abs","obliques","upperAbs","lowerAbs"],"quads":["quadriceps","innerQuad","outerQuad","hipFlexors"],"hamstrings":["hamstring","adductors","gluteal"],"calves":["calves","tibialis","ankles","feet"],"head":["head","face","neck","hair"]},"MALE_FRONT_PATHS":{"chest":{"left":["M272.91 422.84c-18.95-17.19-22-57-12.64-78.79 5.57-12.99 26.54-24.37 39.97-25.87q20.36-2.26 37.02.75c9.74 1.76 16.13 15.64 18.41 25.04 3.99 16.48 3.23 31.38 1.67 48.06q-1.35 14.35-2.05 16.89c-6.52 23.5-38.08 29.23-58.28 24.53-9.12-2.12-17.24-4.38-24.1-10.61z"],"right":["M416.04 435c-15.12.11-34.46-6.78-41.37-21.48q-1.88-3.99-2.84-12.18c-2.89-24.41-5.9-53.65 8.44-74.79 4.26-6.26 10.49-7.93 18.36-8.56q11.66-.92 23.32-.35c10.58.53 18.02 2.74 26.62 7.87 12.81 7.65 19.73 14.52 22.67 29.75 4.94 25.57.24 64.14-28.21 74.97q-12.26 4.67-26.99 4.77z"]},"abs":{"left":["M311.02 531.71a.23.23 0 01-.19-.21q-.39-10.47 1.9-20.76c1.26-5.69 7.66-9.9 13.1-12.9 9.09-5.01 18.93-11.15 28.56-14.92a1.24 1.21-42.6 01.94.03c3.28 1.52 4.78 3.87 4.82 7.68q.13 13.16-.15 26.31c-.08 3.85.78 8.39-.87 13.1q-.17.46-.59.72-2.65 1.65-4.29 1.82-21.06 2.22-43.23-.87z","M321 577.76c-5.17-.33-8.71-.44-10-6.26q-3.2-14.44-.59-27.83.11-.53.64-.63c7.58-1.44 13.62-2.45 22.45-4.56q11.5-2.76 23.94-1.88c3.67.26 3.3 3.46 3.4 6.21q.46 12.55-.33 26.94-.25 4.41-1.81 8.08-.21.49-.73.6-1.39.28-3.22.29-16.89.14-33.75-.96z","M347.73 429.25c7.46-3.61 10.5 6.27 10.99 11.52.48 5.06 3.46 30.61-2.78 32.93q-4.17 1.55-6.89 3.33-17.56 11.54-35.88 21.46a1.6 1.59-21.9 01-2.3-.98c-2.87-10.41-10.59-43.96 1.66-50.95 11.3-6.45 23.96-11.86 35.2-17.31z","M350.35 712.81c-29.15-9.93-37.98-100.69-39.47-126.61a.99.99 0 01.33-.8c3.58-3.26 27.61-1.47 34.62-.93 4.41.34 15.27 1.31 15.26 7.53-.05 40.77.64 82.05-1.96 122.72a1.29 1.29 0 01-1.86 1.08c-2.3-1.14-4.12-2.04-6.92-2.99z"],"right":["M371.94 473.31c-5.46-2.59-2.97-24.26-2.77-29.56.25-6.8 2.41-18.63 12.64-13.8q16.26 7.67 32.34 15.72 6.18 3.1 7.13 10.05c.58 4.26 1.35 8.49 1.07 12.72q-.84 12.55-4.33 26.56-.54 2.16-1.1 3.44-.25.58-.81.31c-15.78-7.29-30.79-19.08-44.17-25.44z","M382.57 533.27c-4.17-.18-9.56-.3-13.15-2.69q-.17-.11-.24-.31c-1.82-5.55-.86-11.17-.96-15.66-.18-8.4-.78-17.36.06-25.71.29-2.85 1.88-4.42 4.15-5.79q.42-.26.91-.19 1.71.25 3.21 1.03 12.48 6.44 24.75 13.26c4.96 2.75 12.21 7.02 13.72 12.41q2.93 10.56 2.39 21.49a.77.76-1.8 01-.67.71q-16.89 2.18-34.17 1.45z","M373.75 578.69c-2.47 0-4.31.22-5-2.7-1.8-7.7-3.05-34.29-.19-38.81q.27-.43.77-.47 13.14-1.24 25.77 1.83c8.41 2.04 14.51 3.01 21.85 4.36a1.29 1.28.6 011.05 1.07q2.16 14.12-.73 28.07c-1.08 5.24-5.22 5.26-10.36 5.63q-14.26 1.04-33.16 1.02z","M416.32 584.73q1.14.41 1.07 1.62c-1.62 26.44-9.96 116.68-40.43 126.74-2.27.75-4.15 2.12-6.35 2.73q-1.18.33-1.3-.89-.86-9.2-1.06-17.75c-.83-35.67-.91-71.2-1.01-106.88q0-.5.31-.89c4.95-6.46 41.69-7.25 48.77-4.68z"]},"biceps":{"left":["M189.52 492.51c-2.43.62-7.38.57-7.51-3.08-.56-16.01-.42-35.49 5.11-50.26 3.19-8.54 13.89-30.22 23.27-32.72 10.08-2.68 12.68 16.59 12.6 22.8-.22 15.98-7.51 34.79-15.05 48.71-4.29 7.94-9.95 12.38-18.42 14.55z"],"right":["M526.69 486.31c-9.9-8.61-17.75-33.21-20.65-47.73-1.41-7.06-1.34-29.61 8.58-32.16 10.33-2.66 23.81 25.34 26.6 32.91q2.6 7.04 3.6 16.13 1.62 14.66 1.66 32.28c.03 11.04-16.45 1.48-19.79-1.43z"]},"triceps":{"left":["M206.2 514.2c-5.41-.67-6.55-7.29-4.69-11.42 11.08-24.55 22.84-50.62 30.54-75.51 1.37-4.41 3.08-8.59 3.95-12.45q2.94-13.12 5.79-26.26.42-1.98 1.82-3.39a.52.52 0 01.81.1q1.04 1.69 1.94 4.56 4.63 14.65 5.15 24.92c.57 11.36-5.11 24.55-8.65 35.5q-7.69 23.78-20.25 45.39c-2.45 4.23-11.51 19.18-16.41 18.56z"],"right":["M517.69 512.06c-20.07-22.12-28.95-51.73-38.01-79.03-3.27-9.87-3.58-19.18-1.34-29.38 1.29-5.88 2.49-13.03 5.61-18.52q.32-.57.72-.06 1.35 1.67 1.79 3.69c2.67 12.33 5.14 24.49 9.07 36.52 8.25 25.28 18.58 49.8 31.1 77.2q1.42 3.1 1.05 5.33c-.81 4.89-5.46 9.25-9.99 4.25z"]},"deltoids":{"left":["M274.06 311.69q3.94 2.77 4.33 8.14.04.48-.38.73c-9.98 5.88-24.35 7.45-28.82 19.75-2.31 6.36-.97 17.35-1.43 23.68q-.55 7.51-5.73 14.07-10.37 13.11-13.81 16.67c-3.41 3.53-6.81 1.76-10.69-.47-15.42-8.87-24.95-25.45-22.52-43.22 2.05-14.92 12.71-25.79 24.06-35.02 16.99-13.82 35.58-17.99 54.99-4.33z"],"right":["M450.39 320.75q-.95-.52-.7-1.58c1.57-6.61 5.8-9.1 12.14-11.9 24.99-11.03 43.76 3.33 60.17 20.74 20.73 21.99 11.81 56.44-14.82 68.19-4.41 1.94-6.79-1.03-9.81-4.51-5.81-6.7-13.46-14.12-15.99-22.8-3.93-13.43 4.32-27.54-9.64-37.62q-8.22-5.93-17.99-9.08-1.84-.59-3.36-1.44z"]},"obliques":{"left":["M264.21 435.53c-4.88-3.13-5.75-12.11-5.39-17.36q.03-.53.51-.75 1.8-.84 3.43.85 10.05 10.45 22.57 16.9c3.64 1.89 5.54 3.62 4.79 7.8q-.42 2.35-2.82 1.87-12.45-2.49-23.09-9.31z","M287.33 452.44c-4.05 4.46-10.38 11.38-16.28 14.3a.84.83 51.1 01-.9-.1c-6.29-5.17-12.54-18.97-14.21-25.09q-.91-3.34.85-8.81.12-.39.35-.05c2.41 3.65 4.59 7.74 8.67 9.76q10.18 5.05 21.27 9.01a.61.61 0 01.25.98z","M297.3 487.82c-7.36-4.23-16.68-11.37-20.55-17.57q-.32-.5.09-.92 8.72-9.04 19.84-17.87 1.46-1.17 2.81-1.67a.44.44 0 01.59.43c-.28 10.08-.4 20.42.65 30.43q.34 3.26-.68 6.15a1.9 1.9 0 01-2.75 1.02z","M257.35 456.18l13.68 16.63a1.86 1.82 22.9 01.4.95c.59 5.4-2.02 12.71-3.8 17.56q-.3.84-.84.13-11.85-15.55-9.77-35.17.04-.45.33-.1z","M271.69 494.07a1.53 1.52-61.8 01-.49-1.64l4.2-13.58a.98.98 0 011.51-.5c3.2 2.32 21.89 14.05 22.26 16.7q1.15 8.32.66 16.79a.9.9 0 01-1.34.73q-14.24-8.05-26.8-18.5z","M299.35 544.62c-7.52-6.03-16.15-13.43-24.23-21.24-6.93-6.7-6-17.19-4.88-26.06a.44.44 0 01.72-.28q13.31 11.88 28.41 21.38.43.27.6.75c2.33 6.49.95 18.37-.07 25.23q-.09.59-.55.22z","M299.09 575.53c-7.98-3.65-27.57-15.86-28.06-26.2q-.57-11.91.46-24.3a.36.36 0 01.67-.15q.84 1.36 2.17 2.54 10.59 9.45 21.68 18.31c4.37 3.49 4.34 6.46 4.16 11.74q-.3 8.82-.42 17.64-.01.72-.66.42z","M308.17 657.58c-7.39-.13-12.41-4.13-17.14-9.39q-11.86-13.22-23.92-26.37-.33-.36-.33-.85.09-23.18 1.81-46.22.53-7.13 2.49-14.41a.71.71 0 011.2-.3q11.54 12.06 25.82 21.1 3.36 2.12 3.62 5.17 2.06 23.67 3.86 47.36c.58 7.62 2.31 13.36 4.43 20.82q.47 1.66-.96 2.79-.39.31-.88.3z"],"right":["M438.7 444.36c-2.09-4.03-.13-6.83 3.63-8.81 10.22-5.36 16.79-11 24.23-18.07a1.71 1.71 0 012.89 1.12c.33 4.74-.81 14.39-5.53 17.22-4.68 2.82-18.74 10.02-24.39 9.14q-.57-.09-.83-.6z","M457.39 466.73c-3.72-1.02-13.2-10.29-16.5-14.49a.52.52 0 01.24-.81q10.94-3.75 21.31-9c3.96-2.01 6.3-5.98 8.57-9.58q.38-.59.55.09c.82 3.33 1.54 6.17.38 9.58-2.55 7.44-7.62 18.79-13.66 24.01a.96.96 0 01-.89.2z","M428.43 487.22c-1.01-1.79-.82-4.55-.71-6.72q.78-15.08.48-30.27-.01-.59.55-.4 1.72.59 3.02 1.64 11.58 9.37 18.82 16.95c3.86 4.05-16.2 17.42-19.56 19.48a1.87 1.86 59.6 01-2.6-.68z","M470.76 456.28a.25.25 0 01.44.13q2.03 19.67-9.8 35.22-.37.48-.6-.08c-1.37-3.29-5.86-16.13-3.51-18.91q6.3-7.47 13.47-16.36z","M452.27 478.5c1.13.49 4.28 12.47 4.78 14.38q.14.5-.23.88-1.29 1.35-2.65 2.41-10.44 8.12-21.76 14.97-1.49.9-2.91 1.33a.81.81 0 01-1.05-.71q-.73-8.62.67-17.15.08-.47.44-.8c1.74-1.6 21.96-15.73 22.34-15.51a.58.03 31 00.37.2z","M428.22 519.14q.11-.36.43-.56 15.3-9.66 28.83-21.69a.43.42-22.6 01.71.29c.51 8.26 2.25 18.67-4.46 25.4q-11.8 11.84-25.03 22.09-.43.34-.49-.2c-.75-6.82-1.97-18.92.01-25.33z","M456.54 524.55a.04.04 0 01.07.02q1.52 13.67.41 27.4-.04.47-.28.88c-4.97 8.3-18.23 19.62-27.88 22.63q-.57.17-.58-.43-.05-10.31-.27-20.53-.1-4.8 2.63-7.09c8.54-7.13 18.56-14.62 25.9-22.88z","M418.89 657.11q-1.12-1.67-.43-3.63 3.27-9.38 4.04-18.23 1.97-22.81 3.58-45.65c.16-2.32.72-6.41 2.84-7.71q14.97-9.23 27.16-21.93.41-.42.71.08 1.29 2.15 1.53 4.2 3.23 27.74 3.13 56.8a1.3 1.28-24.5 01-.33.86q-12.74 13.93-25.55 27.75c-4.8 5.17-9.09 7.87-15.73 7.96q-.61.01-.95-.5z"]},"quadriceps":{"left":["M292.42 935.6q-.95-.52-1.57-1.4-4.1-5.79-7-13.53-7.8-20.79-13.3-42.33c-9.06-35.53-19.33-71.36-25.03-107.59-5.33-33.86 4-74.19 20.7-103.37q.35-.62.53.07c14.44 55.57 39.03 107.94 41.45 165.34 1.11 26.34.66 52.96-3.6 79.03-.63 3.83-4.73 27.81-12.18 23.78z","M275.11 942.93q-2.42-2.18-3.57-5.24c-3.98-10.61-7.68-21.02-12.81-31.32-7.85-15.76-10.77-34.56-13.2-51.46-2.11-14.63-2.31-31.47-3.93-47.18-.22-2.16-1.04-12.78.46-13.79q1.36-.92 2.08.55c1.5 3.08 3.12 6.12 3.66 9.58q8.21 52.38 26.36 102.15c2.87 7.87 9.98 30.5 1.85 36.74a.71.7-42.5 01-.9-.03z","M322.69 945.72c-3.73 6.14-10.77-2.43-12.6-5.6-3.16-5.47-2.62-14.93-1.78-20.81 4.03-28.09 5.6-52.81 3.48-80.78q-.06-.79.28-.08 15.77 32.83 14.26 68.9c-.4 9.54-2.94 22.48-2.91 34.13q.01 3.02-.73 4.24z"],"right":["M437.82 933.52c-8.9 14.18-15.15-26.74-15.46-29.25q-5.26-43.04-1.19-86.08c4.9-51.8 26.91-99.32 40.38-150.92q.18-.66.5-.06c17.25 31.67 25.39 68.28 20.54 104.36q-2.29 17.02-8.71 42.76-7.56 30.25-15.2 60.47-6.13 24.25-15.06 47.61-1.83 4.79-5.8 11.11z","M451.79 942.6c-9.95-10.01 4.97-42.91 8.94-55.41q12.55-39.53 19.27-80.47c.49-2.97 2.64-12.34 5.41-13.28a.83.83 0 011.09.64q.74 4 .45 7.92c-1.99 26.52-3.37 58.99-11.01 87.73q-2.53 9.5-7.46 18.8c-4.38 8.24-6.97 16.72-10.08 25.27q-1.66 4.54-4.55 8.63a1.35 1.35 0 01-2.06.17z","M406.69 946.81c-3.24-2.77-1.48-10.64-2.01-14.71q-2.23-17.18-2.57-22.16c-1.75-25.07 3.61-49.11 13.98-71.92q.23-.51.2.05c-1.2 19.15-1.28 38.18.83 57.38q1.68 15.4 3.39 30.8c.43 3.92-.31 9.71-2.09 13.33-1.62 3.28-7.58 10.77-11.73 7.23z"]},"calves":{"left":["M252.09 1032.57c.24-3.71 2.14-22.17 4.63-24.18a1.03 1.02-17.9 011.67.85c-.45 7.89-1.27 16-1.49 23.45q-.57 18.93-.66 37.88-.02 3.63.34 6.85c2.08 18.76 5.56 37.32 9.3 55.8 3.82 18.84 9.13 37.64 13.11 56.63q2.44 11.68 2.08 17.95c-.32 5.7-3.08 20.49-8.51 23.92a.62.62 0 01-.84-.16q-1.2-1.65-.95-3.55c.92-7.26 1.45-14.15-.3-21.52q-8.25-34.74-13.62-59.06c-1.86-8.44-3.17-17.18-3.93-26.3q-3.69-44.24-.83-88.56z","M315.01 1025.17a.16.16 0 01.32.02c4.06 25.75 8.98 52.72 8.71 77.81q-.13 12.06-5.74 26.31c-7.2 18.3-8.93 38.57-15.95 56.93q-.18.48-.21-.03c-1.87-34.47-5.67-65.91-8.56-103.28q-.97-12.49 4.44-23.14 7.47-14.69 15.14-29.29c.81-1.55 1.35-3.62 1.85-5.33z"],"right":["M455.5 1231.67c-7.13-5.81-9.23-24.34-8.2-31.86 1.41-10.32 4.63-23.14 7.98-36.33q9.54-37.46 15.15-75.74c2.86-19.5 1.53-40.15.75-59.8-.22-5.67-.98-12.51-1.23-18.75a.97.97 0 011.87-.4c.35.86.92 1.76 1.12 2.68q2.96 14.31 3.31 20.53 2.37 43.28-.49 84.75-1.21 17.42-5.43 35.77-6.33 27.51-12.84 54.98-2.01 8.49-.11 18.36c.36 1.9.11 3.95-.68 5.55a.79.79 0 01-1.2.26z","M412.77 1025.44a.14.14 0 01.27-.04c4.88 11.62 10.93 22.01 17.28 34.78 4.07 8.19 4.71 14.41 4.1 24.25-2.13 34.3-6.27 68.85-8.45 101.59q-.05.69-.31.05-1.48-3.67-2.28-6.75c-4.34-16.75-8.78-38.38-16.39-57.57q-1.4-3.55-2.2-10.11c-1.78-14.73-.2-31.24 2.04-45.88q3.06-20.02 5.94-40.32z"]},"adductors":{"left":["M280.26 647.4c11.65 10.74 22.18 21.04 31.02 34.3 15.82 23.72 27.55 49.72 34.01 77.58 1.34 5.79-6.14 20.34-12.62 20.22q-.52-.01-.72-.49-.67-1.59-1.21-3.13c-14.68-41.71-27.96-79.71-46.87-117.01-1.9-3.74-3.05-7.33-4.06-11.2a.27.27 0 01.45-.27z","M331.64 898.32q-.17.57-.23-.02c-2.23-25.01-8.47-50.09-14.25-74.53q-19.4-82.1-42.46-163.69-.58-2.08.33-.13c19.88 42.53 38.94 86.51 51.64 132.07 9.49 34.06 15.59 71.67 4.97 106.3z","M334.46 789.17c1.56-2.63 14.39-20.38 16.2-20.37a1.71 1.7-89.2 011.7 1.76q-1.12 34.88-7.4 68.95c-.38 2.06-1.41 4.27-2.16 6.23q-.24.62-.34-.04-3.68-25.45-8.44-50.7c-.34-1.79-.63-4 .44-5.83z"],"right":["M395.47 779.4c-5.7 1.33-11.34-11.87-12.46-15.86q-.61-2.18-.02-4.65 10.17-42.64 35.06-78.81c9.47-13.77 18.83-22.36 29.85-32.56q.55-.5.4.22-1.12 5.7-3.73 10.83c-19.44 38.38-33.3 79.2-47.77 119.65a1.84 1.83-86.4 01-1.33 1.18z","M453.65 658.99q.67-1.43.23.09-26.73 93.75-48.63 189.74c-1.98 8.7-3.66 17.9-5.44 26.84q-2.19 11.05-2.78 22.43a.15.15 0 01-.3.04c-8.18-24.48-6.74-51.98-1.87-76.86 11.07-56.49 34.44-110.42 58.79-162.28z","M377.91 768.67c1.49.84 1.76 1.49 2.66 2.66q6.16 8.04 12.23 16.13c1.88 2.52 1.97 4.18 1.38 7.45q-4.57 25.23-8.43 50.57-.11.71-.4.05-1.89-4.29-2.54-8.09-5.57-32.28-6.98-65.01-.09-2 .81-3.44a.95.94 30.8 011.27-.32z"]},"trapezius":{"left":["M285.01 307.01a.89.89 0 01-.11-1.64q19.44-9.61 35.65-24.8 1.68-1.57 3.31-.31.4.32.45.82 1.25 12.61-1.57 25.41c-.74 3.32-2.55 4.23-5.9 4.48q-16.02 1.24-31.83-3.96z"],"right":["M414 311.19c-5.24-.12-7.81-.64-8.9-6.27q-2.33-12.09-1.17-23.94.06-.61.61-.89 1.66-.85 3.65.99 16.12 14.87 33.97 23.63 3.65 1.79-.27 2.89-13.88 3.91-27.89 3.59z"]},"neck":{"left":["M354.01 315.07q-3.49-3.65-5.9-8.23c-6.46-12.3-11.03-25.42-16.12-38.77-2.92-7.66-1.98-19.44-1.61-27.6q.03-.58.47-.21c9.06 7.39 11.33 17.46 15.67 27.62 5.4 12.61 15.4 33.31 9.11 46.92a1 .99 35.5 01-1.62.27z","M345.77 316c-4.12-1.96-12.78-6.76-15.07-11.38-4.29-8.65-2.69-16.02-2.28-25.25a1 1 0 011.95-.28c4.29 12.42 10.5 24.4 15.71 36.61q.23.55-.31.3z"],"right":["M372.75 314.71c-5.78-9.67 1.71-31.17 6.17-40.68 5.95-12.68 8.21-24.68 18.35-33.9a.49.49 0 01.82.35c.28 8.68.84 19.39-1.97 27.72-5.26 15.58-11.39 33.46-21.42 46.62a1.18 1.18 0 01-1.95-.11z","M398.01 278.49a.5.49 35.5 01.87-.14c2.01 2.7 1.62 11.6 1.61 15.13-.04 12.42-8.2 17.45-17.9 22.58a.35.35 0 01-.48-.46c5.51-12.02 11.85-24.46 15.9-37.11z"]},"forearm":{"left":["M127.23 683.05c-4.07-2.12 1.27-27.07 2.25-31.57 4.98-23.03 9.17-46.17 13.91-69.25q1.53-7.47 2.13-15.13c.93-12.09.81-22.15 6.23-31.59 7.1-12.33 13.54-29.16 26.1-36.73a1.98 1.97 62.7 012.84.91c1.92 4.48 1.93 8.28 2.06 14.15.44 19.77-1.3 41.04-8.72 59.67-11 27.62-22.22 55.21-32.62 82.91-4.04 10.76-7.56 20.66-12.82 26.39q-.59.65-1.36.24z","M201.5 527.4a.84.84 0 01.67.65c3.98 17.15-2.93 39.36-10.95 54.41-4.6 8.63-13.06 20.43-18.21 31.33q-13.21 27.92-24.58 56.64-2.51 6.35-6.61 11.02a1.43 1.43 0 01-2.5-.81q-.36-3.78.84-7.17 10.31-29.18 21.57-57.99c6.32-16.18 14.55-31.65 20.66-47.87 3.69-9.82 5.36-22.36 7.32-30.62 1.49-6.27 4.19-11.06 11.79-9.59z","M207.33 540.4a.6.59-63.1 011.03-.34l5.38 6.02q.4.45.33 1.06-.52 4.1-1.29 5.84-6.91 15.65-13.69 31.35c-5.41 12.53-16.33 28.4-23.51 44.89-8.3 19.08-16.03 39.32-26.75 57.16a.36.36 0 01-.62 0l-.19-.32q-.17-.28-.06-.59 10.08-29.91 23.05-58.65 2.9-6.42 5.47-11.21c4.62-8.59 10.86-16.17 14.62-23.02q13.23-24.13 16.23-52.19z"],"right":["M600.08 683.04c-5-4.14-8.97-15.46-11.29-21.56-5.82-15.25-11.38-30.55-17.58-45.7q-9.15-22.39-18.02-44.89c-5.58-14.19-7.32-31.42-7.99-46.57-.29-6.44-.68-19.43 2.67-25.02a1.71 1.71 0 012.25-.63c6.72 3.52 11.29 9.96 14.87 16.5q6.25 11.38 12.68 22.66c1.97 3.45 2.93 7.66 3.41 12.06 1.16 10.6 1.55 21.29 3.66 31.65 3.93 19.29 7.38 38.63 11.47 57.92 1.5 7.07 9.3 39.08 5.12 43.5a.91.91 0 01-1.25.08z","M586.58 681.46q-4.35-4.47-6.75-10.61-11.35-28.91-24.59-57.01c-5.72-12.13-14.32-22.86-19.97-35.1-7.1-15.36-12.9-33.32-9.27-50.31a1.44 1.43-87.1 011.23-1.12c7.47-.88 9.29 2.88 11.02 9.2 3.39 12.42 4.76 25.91 9.75 36.7 15.55 33.65 27.61 64.94 39.31 98.42 1.13 3.24 2.05 5.47 1.62 9.04a1.38 1.37 26.3 01-2.35.79z","M579.58 686.43q-3.92-5.77-6.87-12.13-8.05-17.34-19.75-44.5-2.68-6.24-6.46-13.62c-5.14-10.05-13.15-22.36-17.34-31.85q-9.55-21.68-13.66-31.36-1.09-2.58-1.33-5.87-.04-.61.37-1.07l5.24-5.85a.69.69 0 011.2.4q2.74 27.05 15.49 50.75 1.7 3.17 8.26 12.86 7.02 10.39 12.18 21.88 8.71 19.41 20.19 50.1 2.22 5.92 3.13 9.98a.36.36 0 01-.65.28z"]},"hands":{"left":["M100.98 745.85c-9.03-6.62-15.78-13.18-13.3-24.59 2.67-12.29 15.01-20.6 25.37-26.21 7.76-4.21 18.22-1.68 26.15.97 7.14 2.39 11.11 6.16 11.1 13.86q-.04 18.51-4.75 36.37c-5.47 20.76-34.48 6.99-44.57-.4z","M53.81 746.32a.91.91 0 01-.74-.95c.14-2.49-.23-6.34 2.25-7.8 4.66-2.71 11.37-5.53 14.15-10.3q6.32-10.86 16.56-20.3 1.27-1.17.64.44c-1.45 3.73-2.86 7.21-3.87 11.59-2.76 11.9-14.62 30-28.99 27.32z","M87.21 745.05c1.44.46 8.14 2.66 8.61 4.55 1.26 5.12-4.42 8.54-7 12.25-7.73 11.1-15.12 23.38-24.25 33.28a1.22 1.22 0 01-2.11-.86c.11-3.93.38-7.1 2.43-10.65q10.27-17.71 19.31-36.11.32-.65 2.13-2.27.38-.35.88-.19z","M108.11 758.12a2.16 2.16 0 011.07 2.87q-10.49 22.55-19.92 45.81c-1.45 3.56-4.37 5.15-7.82 6.04a1.35 1.34-8.1 01-1.69-1.26c-.11-3.05.37-5.87 1.58-8.9q8.1-20.28 15.15-40.96c.41-1.2.62-3.33 1.69-4.85a1.21 1.21 0 01.91-.49q4.72-.21 9.03 1.74z","M134.09 799.9q-1.16-1.7-1.41-3.73-2.1-17.07-1.18-34.29.03-.6.61-.75l6.93-1.85q.68-.19.65.52-.51 10.9-.85 21.71c-.28 8.58.1 12.65-4.17 18.4a.36.36 0 01-.58-.01z","M108.13 814.65a1.48 1.48 0 01-1.62-1.47c-.02-2.83-.14-5.66.32-8.53q2.9-17.79 5.4-35.65.53-3.84 1.58-7.56a.66.66 0 01.76-.48l7.26 1.24a.97.97 0 01.78 1.14q-4.76 23.96-9.1 46.26-.9 4.64-5.38 5.05z"],"right":["M591.31 755.99c-8.06-2.93-8.66-9.76-10.28-17.06q-3.22-14.42-3.1-29.3.04-4.06 1.46-6.55c4.34-7.57 18.16-9.91 25.63-10.35 8.75-.51 18.37 6.96 24.99 12.27q8.92 7.17 10.74 17.52c2.45 13.89-12.11 23.41-22.7 29.04-6.95 3.69-18.63 7.39-26.74 4.43z","M641.97 706.78q10.85 9.65 17.61 21.91c1.63 2.97 9.74 6.76 12.87 8.59 2.9 1.7 3.03 4.81 2.55 8.5q-.06.42-.48.49c-8.16 1.32-11.99-1.93-17.72-7.23-10.35-9.58-10.5-20.33-15.33-31.9q-.54-1.29.5-.36z","M638 760.07c-2.54-3.42-7.52-6.03-5.44-11.11q.18-.44.61-.63l7.41-3.3q1.29-.58 2.05.62 3.33 5.23 5.69 10.04 6.84 13.94 14.71 27.33c1.35 2.29 4.28 10.16 2.25 12.11a1.22 1.22 0 01-1.77-.08c-9.43-10.98-16.85-23.36-25.51-34.98z","M647.83 812.68c-4 .24-7.71-2.87-9.11-6.38q-9.28-23.27-19.74-45.33a2.05 2.05 0 01.92-2.71q4.5-2.28 9.62-1.7a1.09 1.07 83.8 01.89.73q7.5 23.06 16.57 45.5 1.8 4.46 1.5 9.24a.7.7 0 01-.65.65z","M596.17 761.18a.84.84 0 01.62.81c-.01 4.86.95 35.3-2.71 37.67q-.49.32-.82-.17-3.41-5.21-3.51-8.49-.45-15.62-1.16-31.23-.03-.72.66-.52l6.92 1.93z","M621.09 814.28c-4.35 1.91-5.92-3.77-6.5-6.56q-4.52-21.91-8.88-43.95a1.41 1.41 0 011.14-1.66l6.8-1.18a.92.92 0 011.06.76q2.79 16.32 5.09 32.91c.85 6.17 2.2 12.25 1.8 18.95q-.03.52-.51.73z"]},"knees":{"left":["M297.69 1008.37c-7.27 7.29-16.34 3.42-19.64-5.18q-6.18-16.11-9.57-30.68c-1.99-8.6-2.24-19.68 9.72-19.91q13.12-.24 26.05 2.15 1.71.32 3.29 1.02a1.17 1.15 4.2 01.63.72c3.17 10.27 2.5 23.36.05 33.69q-2.37 10.01-10.53 18.19z","M288.03 1059.54c-6.99-5.81 13.75-46.43 17.3-53.91q7.3-15.38 10.9-32.01c.74-3.42 2-6.31 4.18-8.64a1.36 1.35 54.7 012.23.39c3.97 9.09 1.66 13.86-1.67 24.65q-10.23 33.19-27.2 63.57-1.8 3.23-4.2 5.84a1.13 1.12-49 01-1.54.11z"],"right":["M430.44 1008.31c-12.92-12.62-14.34-33.49-10.92-50.31.31-1.53 1.09-2.53 2.73-2.86q11.44-2.25 23.08-2.59c14.13-.42 17.31 5.67 14.54 18.63q-3.13 14.69-9.12 30.37c-3.45 9.03-11.63 15.25-20.31 6.76z","M438.96 1059.52q-2.25-1.89-3.8-4.64-20.15-35.92-31.06-75.66-2.11-7.68 1.95-14.16a1.16 1.16 0 011.91-.08c2.26 3.06 3.4 5.4 4.26 9.37 3.98 18.54 10.94 32.53 20.07 51.09 3.51 7.14 11.38 26.16 8.5 33.61a1.16 1.16 0 01-1.83.47z"]},"tibialis":{"left":["M263.52 973.59a.6.6 0 011.09-.14q1.38 2.22 1.83 5.06c7.87 49.97 18.01 99.59 25 149.68q4.63 33.19 4.31 67.55-.04 3.45-2.15 5.76-.4.44-.75-.03-1.89-2.58-3.08-5.51c-11.63-28.6-20.46-58.12-24.26-88.68q-4.96-39.97-5.72-69.53c-.13-5.27-.17-12.59.35-18.98q1.7-20.77 2.52-41.6c.04-1.16.52-2.43.86-3.58z"],"right":["M463.39 973.68a.7.7 0 011.25-.1c.27.46.64 1.34.68 1.93q1.26 20.88 2.53 41.76.66 10.82.39 19.98-1.23 40.77-7.51 82.25c-3.91 25.87-12.19 51.55-21.96 75.76q-1.13 2.79-3.27 6.13-.29.44-.71.12c-2.68-2.06-2.32-6.7-2.29-10.32.26-31.03 2.71-55.52 8.76-91.4q9.27-55.06 18.94-110.05c.8-4.5.99-10.52 3.19-16.06z"]},"ankles":{"left":["M291.88 1208.11c5.48-1.03 11.85 5.55 13.38 10.37q2.45 7.74 1.47 16.83-.09.83-.45.08c-4.31-9.05-8-16.99-15.39-23.88a1.98 1.98 0 01.99-3.4z","M275.88 1270.94c-4.41-3.87-7.4-7.17-4.91-13.37q4.78-11.92 5.49-21.32.62-8.27 6.22-12.84c9-7.33 20.8 15 23.1 22.1 2.55 7.91 4.83 16.36 4.49 24.5-.31 7.14-2.02 17.4-6.49 23.1q-.3.38-.53-.05c-5.67-10.74-18.6-14.41-27.37-22.12z"],"right":["M430.92 1209.12c2.24-1.35 10.54-2.02 6.02 2.65q-9.99 10.32-14.82 23.8a.28.28 0 01-.55-.08c-.52-10.27-.48-20.45 9.35-26.37z","M445.01 1223.26c8.45 6.56 6.46 16.66 9.35 25.59q1.76 5.43 3.47 10.88c3.84 12.26-27.75 21.49-32.21 32.42q-1.02 2.51-2.17.05c-6.91-14.82-6.79-29.36-1.78-44.58q2.82-8.57 8.02-16.04c3.02-4.35 9.61-12.76 15.32-8.32z"]},"feet":{"left":["M264.5 1334.5c-3.98-.34-18.59-4.25-19.04-9.44a1.4 1.4 0 01.27-.94c9.66-13.03 20.9-25.49 28.65-39.78q.25-.47.78-.37 9.76 1.78 17.73 7.65a1.19 1.18 43 01.07 1.86c-1.32 1.11-1.65 2.62-1.06 4.35 2.96 8.57-.92 16.55-4.81 25.34-1.79 4.06-1.76 8.99-2.81 13.62a1.56 1.56 0 01-1.99 1.14q-8.36-2.64-17.79-3.43z","M291.87 1340.12c-2.25-2.64-2.07-5.93-.78-9.35q3.34-8.88 4.02-18.35.43-6.02 1.25-8.74 1.32-4.37 3.45-8.22a.66.65 53.7 011.21.19q1.97 9.26 6.28 17.3c2.59 4.85-.82 11.49-2.92 16.14a1.81 1.78-35.8 00-.16.94q.42 4.3-1.9 7.94-.22.33-.61.43l-8.79 2.06a1.06 1.06 0 01-1.05-.34z"],"right":["M444.66 1337.65q-1.08-1.3-1.28-3.09c-.52-4.48-.73-8.39-2.77-12.64-3.51-7.31-7.06-16.37-4.43-23.19.77-1.99.92-3.79-.76-5.13a1.29 1.28 46.4 01.04-2.04q7.96-5.76 17.59-7.64.46-.1.69.32c7.25 13.1 17.21 24.83 26.45 36.56q1.11 1.41 2.51 3.8a1.17 1.14-51 01.09.95c-1.75 5.01-12.93 7.89-17.77 8.55q-9.87 1.36-19.54 3.82a.82.8-26.2 01-.82-.27z","M426.94 1338.55c-2.01-.34-2.96-5.48-3-7.12-.15-6.02-6.29-11.65-3.12-17.89q4.35-8.53 6.34-17.75a.78.78 0 011.47-.17c2.12 4.52 4.18 9.08 4.35 14.33q.35 10.43 3.97 20.24c1.19 3.22 1.52 5.83.39 8.78a2.32 2.31 19.3 01-2.87 1.38q-3.44-1.09-7.53-1.8z"]},"serratus":{"left":["M268.5 460.2c-2.1-1.3-3.8-3.9-3.2-6.4q1.2-5.1 4.8-8.3c2.4-2.1 5.6-1.8 8.2-.4q4.3 2.3 6.1 7.1c1.2 3.2-.3 6.8-3.1 8.4q-5.8 3.3-12.8-.4z","M262.3 478.5c-1.8-1.6-2.9-4.2-2.1-6.7q1.5-4.8 5.4-7.2c2.6-1.6 5.8-.8 8.1 1.1q3.7 3.1 4.2 8.2c.3 3.4-1.5 6.3-4.6 7.4q-5.6 2-11-.8z","M258.1 498.3c-1.5-1.9-2.2-4.6-1.1-7q2-4.3 6.1-6.1c2.8-1.2 5.9.1 7.8 2.4q3.1 3.7 2.8 8.9c-.2 3.5-2.3 5.9-5.6 6.5q-5.3 1.2-10-4.7z"],"right":["M456.8 460.2c2.1-1.3 3.8-3.9 3.2-6.4q-1.2-5.1-4.8-8.3c-2.4-2.1-5.6-1.8-8.2-.4q-4.3 2.3-6.1 7.1c-1.2 3.2.3 6.8 3.1 8.4q5.8 3.3 12.8-.4z","M462.9 478.5c1.8-1.6 2.9-4.2 2.1-6.7q-1.5-4.8-5.4-7.2c-2.6-1.6-5.8-.8-8.1 1.1q-3.7 3.1-4.2 8.2c-.3 3.4 1.5 6.3 4.6 7.4q5.6 2 11-.8z","M467.1 498.3c1.5-1.9 2.2-4.6 1.1-7q-2-4.3-6.1-6.1c-2.8-1.2-5.9.1-7.8 2.4q-3.1 3.7-2.8 8.9c.2 3.5 2.3 5.9 5.6 6.5q5.3 1.2 10-4.7z"]},"hipFlexors":{"left":["M305.2 700.5c-3.8-2.1-7.2-6.3-8.1-10.7q-1.4-6.8 1.2-13.1c1.8-4.3 5.9-7.1 10.3-7.8q6.2-.9 11.4 2.8c3.5 2.5 5.2 6.9 4.8 11.2q-.6 6.7-5.3 11.9c-3.1 3.4-8.1 8.8-14.3 5.7z"],"right":["M421.5 700.5c3.8-2.1 7.2-6.3 8.1-10.7q1.4-6.8-1.2-13.1c-1.8-4.3-5.9-7.1-10.3-7.8q-6.2-.9-11.4 2.8c-3.5 2.5-5.2 6.9-4.8 11.2q.6 6.7 5.3 11.9c3.1 3.4 8.1 8.8 14.3 5.7z"]},"upperChest":{"left":["M275.8 345.1c5.2-4.8 14.3-8.2 21.6-9.4q12.8-1.8 24.5.5c6.4 1.2 11.2 6.3 13.4 12.5q3.2 9.1 1.8 18.8c-.9 6.2-5.1 10.4-10.8 12.9q-8.5 3.7-18.6 2.4c-6.8-.9-13.2-3.1-18.4-7.8q-7.7-6.9-13.5-29.9z"],"right":["M449.5 345.1c-5.2-4.8-14.3-8.2-21.6-9.4q-12.8-1.8-24.5.5c-6.4 1.2-11.2 6.3-13.4 12.5q-3.2 9.1-1.8 18.8c.9 6.2 5.1 10.4 10.8 12.9q8.5 3.7 18.6 2.4c6.8-.9 13.2-3.1 18.4-7.8q7.7-6.9 13.5-29.9z"]},"lowerChest":{"left":["M279.3 394.2c3.1-2.8 8.9-5.1 13.2-5.9q9.8-1.8 19.8.3c5.6 1.2 10.1 4.8 12.8 10.1q3.8 7.5 2.4 15.9c-1.1 6.1-5.8 9.8-11.2 11.8q-7.6 2.8-16.1 1.1c-5.7-1.1-10.8-3.8-14.5-8.5q-5.5-7-6.4-24.8z"],"right":["M446.2 394.2c-3.1-2.8-8.9-5.1-13.2-5.9q-9.8-1.8-19.8.3c-5.6 1.2-10.1 4.8-12.8 10.1q-3.8 7.5-2.4 15.9c1.1 6.1 5.8 9.8 11.2 11.8q7.6 2.8 16.1 1.1c5.7-1.1 10.8-3.8 14.5-8.5q5.5-7 6.4-24.8z"]},"innerQuad":{"left":["M316.5 780.2c-2.8-1.4-4.1-4.8-4.2-8.1q-.3-12.8 2.1-25.3c1.6-8.2 4.8-15.8 9.2-22.6q5.7-8.8 13.1-15.9c2.4-2.3 5.8-1.2 7.1 1.8q3.2 7.4 3.8 15.6c.8 11.2-.4 22.5-3.2 33.4q-2.8 10.8-8.1 18.4c-3.4 4.8-12.8 6.2-17.8 2.7z"],"right":["M410.2 780.2c2.8-1.4 4.1-4.8 4.2-8.1q.3-12.8-2.1-25.3c-1.6-8.2-4.8-15.8-9.2-22.6q-5.7-8.8-13.1-15.9c-2.4-2.3-5.8-1.2-7.1 1.8q-3.2 7.4-3.8 15.6c-.8 11.2.4 22.5 3.2 33.4q2.8 10.8 8.1 18.4c3.4 4.8 12.8 6.2 17.8 2.7z"]},"outerQuad":{"left":["M258.4 810.5c-3.2-5.8-4.8-13.2-4.1-19.8q1.2-11.8 5.8-22.8c3.1-7.4 7.8-14.1 13.5-19.8q7.2-7.2 16.1-12.4c2.8-1.6 6.1.2 6.8 3.5q1.8 8.4 1.2 17.2c-.8 12.1-3.8 24.1-8.4 35.2q-4.6 11.1-11.8 19.8c-4.6 5.5-14.5 7.1-19.1-0.9z"],"right":["M468.3 810.5c3.2-5.8 4.8-13.2 4.1-19.8q-1.2-11.8-5.8-22.8c-3.1-7.4-7.8-14.1-13.5-19.8q-7.2-7.2-16.1-12.4c-2.8-1.6-6.1.2-6.8 3.5q-1.8 8.4-1.2 17.2c.8 12.1 3.8 24.1 8.4 35.2q4.6 11.1 11.8 19.8c4.6 5.5 14.5 7.1 19.1-0.9z"]},"upperAbs":{"left":["M315.8 448.2c-2.1-1.8-3.2-5.1-2.8-8.1q.8-6.2 4.1-11.4c2.2-3.4 5.8-5.1 9.6-5.3q6.2-.3 11.8 2.1c3.8 1.6 5.8 5.4 5.4 9.6q-.6 6.8-4.8 12.1c-2.8 3.5-6.8 4.8-11.1 4.2q-7.1-1-12.2-3.2z"],"right":["M411.5 448.2c2.1-1.8 3.2-5.1 2.8-8.1q-.8-6.2-4.1-11.4c-2.2-3.4-5.8-5.1-9.6-5.3q-6.2-.3-11.8 2.1c-3.8 1.6-5.8 5.4-5.4 9.6q.6 6.8 4.8 12.1c2.8 3.5 6.8 4.8 11.1 4.2q7.1-1 12.2-3.2z"]},"lowerAbs":{"left":["M320.1 620.5c-3.1-2.4-4.8-6.8-4.2-10.8q1.1-7.2 5.1-13.2c2.6-3.8 6.4-5.8 10.8-5.4q6.8.6 12.1 4.8c3.4 2.7 4.8 7.1 3.8 11.4q-1.6 6.8-6.8 11.1c-3.4 2.8-7.8 3.8-12.1 3.1q-5.1-.8-8.7-1z"],"right":["M407.2 620.5c3.1-2.4 4.8-6.8 4.2-10.8q-1.1-7.2-5.1-13.2c-2.6-3.8-6.4-5.8-10.8-5.4q-6.8.6-12.1 4.8c-3.4 2.7-4.8 7.1-3.8 11.4q1.6 6.8 6.8 11.1c3.4 2.8 7.8 3.8 12.1 3.1q5.1-.8 8.7-1z"]},"frontDeltoid":{"left":["M261.2 338.5c-3.2-1.8-5.1-5.4-4.8-9.1q.5-6.2 4.2-11.1c2.5-3.3 6.2-4.8 10.1-4.1q5.8 1.1 9.8 5.4c2.7 2.9 3.4 7.1 2.1 10.8q-2.1 5.8-7.4 8.8c-3.5 2-9.2 2.1-14-.7z"],"right":["M464.1 338.5c3.2-1.8 5.1-5.4 4.8-9.1q-.5-6.2-4.2-11.1c-2.5-3.3-6.2-4.8-10.1-4.1q-5.8 1.1-9.8 5.4c-2.7 2.9-3.4 7.1-2.1 10.8q2.1 5.8 7.4 8.8c3.5 2 9.2 2.1 14-.7z"]},"head":{"left":[],"right":[]},"hair":{"left":[],"right":[]}},"MALE_BACK_PATHS":{"neck":{"left":["M1022.74 290.63a.62.61 25.9 01-.36-1.03q1.71-1.83 4.11-3.11c8.19-4.35 19.4-8.3 23.38-17.48q8.48-19.57 8.22-40.85-.05-4.38.57-5.76c1.98-4.38 9.65-3.66 13.85-2.91 4.3.76 4.71 3.25 4.68 7.3q-.2 24.11-.88 48.2c-.12 4.25 1.6 15.84-4.88 16.32-14.57 1.08-32.6 1.81-48.69-.68z"],"right":["M1095.75 291.46c-4.3-.25-4.9-3.99-4.95-7.71q-.46-29.47-1-58.94c-.13-7.39 11.74-6.23 15.99-4.85 4.2 1.36 3.01 6.89 2.88 10.79-.28 8.88 5.15 41.1 15.32 46.78q8.6 4.81 17.27 9.51 1.97 1.07 3.26 2.36a.8.79 63.6 01-.45 1.35c-16.12 2.17-33.78 1.56-48.32.71z"]},"trapezius":{"left":["M1071.06 308.94c5.6 4.92 6.96 17.83 7.43 24.88q1.5 22.3.93 44.68-1.2 46.76-5.66 94a.57.56 3.7 01-.59.51q-.68-.03-.94-1.01-4.29-15.9-9.79-25.19c-10.24-17.31-18.8-31.84-25.59-49.4-10.19-26.38-15.6-54.28-26.46-80.58q-3.07-7.43-7.61-14.07-.3-.43.2-.6 12.47-4.28 25.48-4.85c5.54-.25 12.15.86 18.32 1.41 9.7.87 16.77 3.6 24.28 10.22z"],"right":["M1163.98 302.12a.43.43 0 01.22.65q-7.08 10.77-11.41 23.37c-10.53 30.61-17.8 62.94-31.3 91.07-5.11 10.64-15.17 25.22-20.12 36.26q-4.08 9.08-6.59 18.83a.77.77 0 01-1.51-.12q-4.27-45.15-5.52-90.99c-.56-20.28-.74-39.92 2.75-60.43 1.04-6.13 2.77-9.98 7.85-13.85 9.8-7.48 18.02-7.73 30.1-9.11 12.02-1.39 23.92.4 35.53 4.32z"]},"deltoids":{"left":["M980.66 319.58c.19.14.55.19.65.32a.8.8 0 01-.16 1.15c-6.78 4.75-15.26 9.77-20.03 15.58-6.41 7.78-8.76 16.96-9.44 27.04-.39 5.92-1.68 9.5-5.59 13.43-10.02 10.08-19.04 16.47-31.14 20.41q-.75.25-.75-.55.19-18.4-.09-36.3-.14-9.4 1.07-14.22c4.04-16.07 22.8-33.85 39.68-35.64 9.99-1.06 17.34 2.46 25.8 8.78z"],"right":["M1227.3 316.44c14.62 9.44 25.48 21.03 25.46 39.51q-.02 20.56-.01 41.37a.37.37 0 01-.51.35c-5.08-2.06-10.41-3.98-14.9-6.97-7.84-5.24-21.14-14.95-21.77-24.95-.69-10.75-2.81-20.85-9.76-29.25-4.68-5.65-12.96-10.58-19.6-15.26q-1.23-.87.01-1.71c4.6-3.13 9.91-6.78 15.25-7.98q13.58-3.03 25.83 4.89z"]},"upperBack":{"left":["M987.06 381.44c-8.48-5.06-14.14-13.28-18.82-22.92q-5.3-10.92-6.46-14.04c-1.49-4.01 35.14-19.22 39.61-20.97q2.75-1.08 4.33-.72c4.33.96 6.61 9.96 7.46 13.7q5.43 23.89 14.65 55.74.78 2.7-.88 4.39c-5.37 5.5-34.69-12.08-39.89-15.18z","M1017.44 583.31q-9.11-9.57-16.97-22.03-2.28-3.62-2.91-7.25c-3.28-18.82-5.77-38.04-10.52-56.55-3.53-13.73-4.74-25.19-6.61-41.43-.85-7.35-5.67-13.34-8.22-18.75q-4.93-10.47-6.44-22.88-.33-2.72 1.89-1.11c7.25 5.27 16.36 6.16 26.91 7.56 8.86 1.19 23.41-3.18 28.94-10.76 3.34-4.58 4.7-6.5 8.86-8.77a.67.66-26.4 01.92.3q10.02 21.8 19.93 43.78c2.56 5.69 12.11 15.88 10.77 21.83-3.65 16.09-9.88 31.96-16.24 47.13-9.72 23.21-18.61 46.72-27.2 70.36q-.24.67-.88.35-1.03-.52-2.23-1.78z","M1017.71 404.73c-23.86 13.25-54.31 7.11-60.45-22.75-1.2-5.81-2.5-15.84.64-20.55 3.63-5.44 7.17 4.18 8.17 6.14 7.71 15.14 31.62 29.16 48.2 31.13q1.84.21 5.26 2.06.4.21.26.64-.86 2.65-2.08 3.33z"],"right":["M1141.45 397.63a2.17 2.14-3.6 01-1.88-1.64q-.71-2.97.18-5.95 8.74-29.19 11.75-43.29c1.73-8.11 3.07-16.77 6.94-22.08 1.92-2.62 4.28-2.27 7.19-1.15q20.52 7.9 39.09 18.77a1.37 1.36 25.9 01.58 1.67c-6.05 15.46-12.98 30.84-28.43 39.45-9.45 5.26-25.83 15.17-35.42 14.22z","M1149.69 404.8q-2.04-1.15-2.45-3.5-.09-.53.41-.75c4.64-2.04 9.78-2.51 14.63-3.87 11.01-3.1 22.03-10.83 30.34-18.57q6.33-5.89 7.58-8.93c1.02-2.49 3.79-9.5 7-9.46q.52.01.87.39 2.71 3.01 2.81 7.2c.33 13.77-2.24 26.93-13.26 35.95-13.88 11.36-33.12 9.94-47.93 1.54z","M1161.19 419.98c6.1 1.57 11.6.99 17.75.06 8.36-1.27 14.83-2.76 21.34-7.27a.54.53 74.1 01.84.47q-.64 11.88-5.76 22.85c-2.42 5.2-6.64 10.84-8.04 16.67q-1.02 4.24-1.43 8.92-1.64 18.72-6.34 37.47c-4.73 18.91-7.13 38.67-10.8 57.85q-.24 1.24-2.2 4.3c-4.57 7.14-12.22 19.43-19.34 23.88a.44.43-25.6 01-.64-.22c-8.26-22.57-16.6-45.11-25.91-67.23-6.67-15.85-13.27-32.14-17.27-48.42q-1.58-6.41 2.91-12.01 5.21-6.51 8.57-14.14 9.25-21 19.01-41.64a.47.47 0 01.65-.21q6.17 3.37 9.51 9.64c2.45 4.6 12.22 7.75 17.15 9.03z"]},"triceps":{"left":["M931.03 442.29c-2.01 2.57-6.52 9.71-10.12 9.17q-.52-.08-.8-.52-1.35-2.09-1.84-4.44c-2.25-10.87-3.28-22.88 1.35-33.38 5.45-12.33 18.27-23.68 29.61-31.2a.47.46 68.7 01.71.32l6.42 38.52q.09.54-.26.97c-.47.58-1.12 1.52-1.71 1.94q-9.11 6.58-18.08 13.36-2.9 2.2-5.28 5.26z","M958.15 427.11a.41.41 0 01.55.27q4.44 16.16-2.23 31.41-3.37 7.73-5.91 19.98c-1.51 7.28-8.93 12.21-11.81 18.82-2.42 5.56-2.41 12.5-3.51 16.66-2.14 8.06-8.51 14.15-13.91 20.13a.93.93 0 01-1.54-.25q-.57-1.3-.75-2.89c-1.93-16.91 2.52-33.52 5.71-49.99 2.16-11.21-1.54-24.15 9.68-34.59q9.54-8.86 19.55-17.23c1.3-1.08 2.7-1.72 4.17-2.32z","M903.57 519.67a1.84 1.82-5.4 01-1.12-.92q-3.54-6.97-3.68-15.19c-.37-21.2 3.8-42.53 9.5-63.44q.33-1.23.92-.1 4.64 8.78 8.6 18.67c2.88 7.21 4.19 12.98 1.88 20.57q-6.07 19.96-14.02 39.23-.65 1.58-2.08 1.18z"],"right":["M1213.94 424.56q-2.02-1.5-3.08-3.02-.31-.46-.22-1 3.32-19.22 6.42-38.46.09-.56.56-.25 14.9 9.82 24.8 22.71c9.8 12.75 9.72 30.37 5.41 45.13a2.62 2.62 0 01-3.76 1.57c-3.26-1.77-6.22-6.71-8.62-9.67-5.24-6.46-14.75-12-21.51-17.01z","M1246.2 534.5q-.95-.3-1.75-1.22c-4.65-5.4-9.13-9.88-11.46-15.51-2.96-7.13-1.37-15.5-5.64-22.09-4.06-6.26-8.72-9.91-10.89-17.58-1.62-5.68-2.81-11.46-4.97-17.02-4.56-11.69-6.45-20.86-3.33-33.56a.59.58-74 01.75-.42q1.69.56 3.22 1.79 11.23 9.08 21.54 19.18c5.39 5.28 6.92 10.13 7.24 18.16.9 22.52 10.62 44.97 6.59 67.49a1.01 1 13.9 01-1.3.78z","M1258.43 439.96q2.01 5.38 3.1 10.68c3.58 17.36 7.13 34.77 6.89 52.61q-.11 8.3-3.94 15.61a1.61 1.6 33.4 01-2.44.5c-1.45-1.19-1.9-3.58-2.43-4.94q-9.23-23.41-13.19-38.15c-2.63-9.81 6.82-27.63 11.53-36.35q.28-.5.48.04z"]},"lowerBack":{"left":["M986.76 627.1c-3.13-13.13-7.31-49.77 7.27-58.07 2.4-1.37 4.8-.82 6.7 1.29 6.15 6.8 16.22 18.56 18.77 28.15a1.35 1.3 52.6 01-.11.98c-2.51 4.53-9.96 8.09-15.83 11.36q-5.47 3.06-11.33 10.52c-1.23 1.56-2.6 4.3-4.5 6.06a.59.58-28.2 01-.97-.29z","M1023.15 607.96a2.06 2.04-74.3 01-.94-1.69c-.17-10.98 5.04-24.58 8.79-34.9q15.61-42.83 36-83.59a1.11 1.1-62.5 011.51-.48c1.25.66 3.21 12.98 3.46 15.08q6.94 59.25 2.82 116.88-.62 8.66-3.1 19.37-.13.53-.59.24l-47.95-30.91z"],"right":["M1090.76 581.75q.62-5.16 0-10.27.22-29.79 3.05-59.5 1.1-11.58 3.91-22.88.31-1.27.44-1.43 1.08-1.43 1.88.17 23.38 46.97 40.14 96.18c1.8 5.28 5.84 16.69 4.38 22.96a1.64 1.64 0 01-.71 1.01l-47.63 30.72q-1.12.72-1.34-.6-4.54-28-4.12-56.36z","M1151.19 603.31q-5.39-3.38-2.19-9.05 8.03-14.22 17.88-24.62c3.49-3.69 9.04.89 10.97 3.99q2.92 4.66 3.8 10.14 3.5 21.77-1.21 43.02a.96.96 0 01-1.77.28c-6.92-11.85-16.03-16.56-27.48-23.76z"]},"forearm":{"left":["M878.44 534.38a.15.15 0 01.18-.13c.47.12 6.68 15.77 7.07 17.22q6.66 24.73 5.52 50.29c-.4 8.9-3.45 17.35-6.64 25.55-7.94 20.38-17.41 41.88-29.59 60.09a1.04 1.02-54.2 01-1.49.25c-.34-.26.37-1.45.47-1.83q5.58-20.8 8.97-42.08 8.65-54.15 15.51-109.36z","M893 518.93a.39.38 24.6 01.69-.25q5.97 7.83 13.11 15.27c8.08 8.4 1.41 28.73-5.88 37.12a1.05 1.05 0 01-1.63-.05c-6.09-7.93-5.41-18.74-4.97-28.44.36-8.12-.76-15.7-1.32-23.65z","M869.06 547.19c2.16.36 1.67 6.21 1.57 7.8q-2.54 38.84-9.11 77.16c-3.04 17.71-8.47 41.3-22.09 54.09a.38.38 0 01-.62-.41c14.51-40.44 19-84.26 26.8-126.31q.9-4.88 1.48-10.82.18-1.81 1.97-1.51z","M864.24 682.58q15.09-28.18 25.12-58.55c8.14-24.63 13.67-42.4 20.79-60.35q3.31-8.37 12.08-9.63c1.35-.2 3.68-.75 4.86.21q1.13.93.61 2.3-5.8 15.45-12.04 29.88c-5.79 13.39-14.92 28.68-20.32 40.14-6.12 13-28.07 59.18-31.64 56.64a.21.21 0 01.03-.36q.15-.07.34-.13.12-.04.17-.15z"],"right":["M1272.99 519.43c.27-.33.33-.75.75-1.05a.32.32 0 01.5.29c-.7 7.22-1.77 14.33-1.66 21.54.13 8.94 2.13 24-5.35 31.17q-.37.35-.73 0c-7.63-7.55-14.2-28.29-6.52-36.92q6.6-7.41 13.01-15.03z","M1312.82 688.04c-4.78-6.01-7.2-10.8-11.76-19.56q-12.39-23.79-21.03-47.53c-4.86-13.36-5.22-26.17-3.83-40.19q1.13-11.5 2.69-19.53 2.72-13.98 9.59-26.79a.17.17 0 01.32.06q7.26 63.12 17.22 120.49 2.43 14.04 7.03 30.55c.22.79.74 1.33.36 2.4a.34.34 0 01-.59.1z","M1296.52 558.51c-.22-2.94-1.44-10.25 2-12.04a.62.61-18.4 01.89.44q6.25 35.69 12.21 71.07c3.88 23 8.77 46.2 16.73 68.19a.29.29 0 01-.47.31c-11.67-10.67-18.09-31.15-20.89-45.98q-7.27-38.55-10.47-81.99z","M1303.5 683.6c-2.89-.66-10.16-13.21-12.11-17.02-8.8-17.21-16.92-34.81-25.84-51.89-5.36-10.27-10.98-20.49-15.39-30.95q-5.86-13.86-11.07-27.8a1.63 1.62 79.5 011.5-2.2c13.02-.16 15.5 7.18 19.65 18.81q9.04 25.33 17.43 50.89 9.65 29.37 23.82 56.84.87 1.69 2.13 3.12.24.28-.12.2z"]},"gluteal":{"left":["M1045.06 626.19q1.42.61 4.11 4.4.27.39-.19.52c-14.47 4.12-26.13 7.4-38.13 15.77q-15.37 10.71-30.53 21.6a.55.54 74.9 01-.86-.5c1.19-13.13 10.35-35.23 20.46-45.06 9.14-8.88 34.99-1.11 45.14 3.27z","M1007.94 762.81c-16.94-16.64-29.37-37.66-31.47-61-2.06-22.84 15.63-34.95 32.18-45.71 8.2-5.33 46.51-27.32 54.37-17.65 5.92 7.29 13.38 15.84 15.44 25.21q3.01 13.63 2.44 27.6-.94 22.59-6.27 44.49c-2.43 9.96-2.9 17.16-2.59 26.75.47 14.83-18.52 17.18-29.12 14.07-6.38-1.87-13.79-4.83-21.35-6.25q-7.39-1.38-13.63-7.51z"],"right":["M1117.94 631.04q-.13-.03-.27-.06-.12-.02-.06-.13 2.58-4.2 7.05-5.92 12.71-4.87 26.13-5.81c12.93-.91 17.1 3.08 23.28 13.06 5.71 9.22 13.32 24.7 13.44 36.06q.01.76-.61.32-16.65-11.74-33.2-23.51c-10.03-7.14-23.72-10.58-35.76-14.01z","M1124.12 776.61c-9.28 2.74-26.75 1.29-28.86-10.88-1.05-6.03.27-14.88-1.3-23.27q-.54-2.94-2.15-9.35c-3.2-12.81-4.02-23.33-5.08-35.27-1.07-12.03-.57-22 1.64-33.17q1.1-5.6 4.19-10.41 8.74-13.58 11.87-16.59c4.96-4.77 15.84.18 21.19 2.11q19.7 7.12 40.17 21.43c9.59 6.7 19.29 14.31 22.93 25.17 4.81 14.37-.65 33.88-7.42 46.87q-7.79 14.97-21.39 28.9-6.74 6.9-15.26 8.36c-7.07 1.21-13.68 4.08-20.53 6.1z"]},"adductors":{"left":["M1070.06 785.19c2.95 1.36 1.8 10.43 1.49 13.04q-3.98 33.27-14.66 64.61a.39.39 0 01-.76-.17c.9-7.05 2.31-14.29 2.16-20.92q-.68-30.14-18.71-54.52-.29-.39.18-.49c7.42-1.52 23.53-4.69 30.3-1.55z"],"right":["M1127.24 787.66c-15.99 21.49-22.3 48.51-16.08 74.83a.47.46-63.2 01-.88.29q-1.99-4.69-3.65-10.24-8.29-27.75-11.6-56.54c-.65-5.71-1.1-11.77 6.87-11.9q13-.19 25.68 2.83a.31.24 41.2 01.1.53q-.12.01-.27.07-.1.04-.17.13z"]},"hamstring":{"left":["M963.27 741.53a.71.7 31.7 011.19-.28q1.51 1.62 2.47 3.99c4.6 11.41 8.93 22.66 11.07 34.72 3.38 19.14 4.84 38.23 3.12 57.74q-1.68 19.06-2.99 38.15c-.51 7.55-.88 15.71.07 23.18q1.08 8.54 1.39 17.57a.52.52 0 01-.98.25q-1.03-2.07-1.8-4.62-5.13-16.92-7.25-34.49-5.01-41.45-6.86-83.17-1.09-24.75-.07-49.51.06-1.59.64-3.53z","M1030.2 791.53q.17-.36.38-.03c5.26 8.11 9.94 16.15 12.47 25.64 3.12 11.72 5.87 24.36 4.31 36.24q-.5 3.8-3.57 14.02c-10.75 35.81-12.83 74.2-18.5 111.1q-.82 5.4-2.55 10.55-.23.68-.59.07c-4.72-8.07-5.18-25.09-5.34-34.81-.7-43.69 1.92-87.82 6.38-131.28 1.41-13.74 1.99-21.15 7.01-31.5z","M998.81 761.94q14.07 14.17 20.1 33.62c.98 3.15-.78 9.61-.93 12.91q-1.3 27.63-2.3 55.27c-.55 15.31-1.54 30.27-5.12 45.26q-8.62 36.18-22.76 68.73-3.65 8.41-10.15 17.19-.45.61-.41-.14c.11-1.93.82-4.15.99-5.71q2.45-22.72 6.08-45.26c2.83-17.66 4.18-35.95 4.33-52.37.33-36.43-.75-73.34 1.47-109.68.33-5.32 1.07-16.16 4.7-20.25q.33-.36.81-.45 1.95-.37 3.19.88z","M1052.52 855.62a.04.04 0 01.08.01q1.07 9.9 2.17 19.87.33 3.04-2.37 14.18c-3.83 15.8-8.15 31.11-8.9 47.47-.99 21.61-3.11 45.66-9.92 66.3q-1.49 4.52-.87-.2 3.38-25.36 3.7-51.99c.05-3.74-.4-10.32.2-15.58 2.19-19.2 7.39-38.25 11.75-57.05 1.78-7.64 2.93-15.21 4.16-23.01z"],"right":["M1183.25 947.53c2.57 14.85 4.32 31.11 6.22 46.14q.35 2.74-1.11.39c-14.67-23.67-23.34-52.15-30.55-79.32q-5.08-19.14-5.97-39.05-1.36-30.37-2.44-60.74c-.22-6.09-2.56-15.63-.55-21.57q5.87-17.35 18.96-31.07c10.77-11.28 10.17 46.55 10.16 48.97-.13 41.09-.45 74.18 1.91 110.07.57 8.75 1.88 17.53 3.37 26.18z","M1136.43 791.52q.27-.42.49.03c3.12 6.46 4.84 12.26 5.68 19.83 5.07 45.8 8.05 94.61 7.56 140.76-.13 11.8-.46 26.22-5.13 37.08a.44.44 0 01-.83-.06q-2.51-9.14-3.69-18.41-3.54-27.64-7.36-55.24c-2.49-18-5.47-35.67-11.09-52.26q-4.35-12.82-2.08-26.75c1.76-10.77 3.58-21.61 8.46-31.16q3.58-6.99 7.99-13.82z","M1115.03 856.73c2.03 18.72 7.11 37.44 11.47 55.77 2.25 9.46 3.94 19.51 3.95 30.11q.02 31.7 4.08 63.16.16 1.26-.29.07-2.7-7.15-4.19-14.6c-4.44-22.21-5.71-40.52-6.87-61.23-.24-4.24-1.19-9.64-2.23-13.92q-3.94-16.25-7.7-32.55c-2.09-9.04.08-18.69 1.6-27.66q.07-.38.32-.09.16.19.01.4-.19.24-.15.54z","M1202.61 741.08a.44.44 0 01.72.03c.52.82.9 1.86.95 2.91q.73 15.98.37 31.97-1.16 52.95-7.85 105.49-1.88 14.74-5.97 29.04-1 3.52-1.92 4.95-1.57 2.47-1.39-.37c.58-9.44 1.83-19.17 1.71-28.16-.32-24.52-4.94-49.11-3.95-72.75.69-16.54 2.5-33.51 7.54-49.38q2.99-9.4 6.61-18.6.74-1.88 3.18-5.13z"]},"calves":{"left":["M982.69 1149.31c-3.07-2.23-3.98-6.24-5.24-11.03-7.19-27.14-7.88-53.18-6.67-82.78q1.03-25.29 9.23-47.45c4.77-12.89 15.33-24.77 23.79-36q.82-1.09.74.27c-1.37 22.86-2.72 45.67-3.11 68.49-.52 30.56-1.51 61.11-.42 91.68.24 6.83-2.77 16.29-10.08 18.37q-4.39 1.25-8.24-1.55z","M983.99 1163.56c7.15-5.59 16.16-.63 17 8.23q4.31 45.02 5.22 90.26c.16 8.25-.8 15.79-2.19 23.65q-.45 2.52-1.43 3.66-.95 1.11-1.22-.33c-5.03-26.7-8.28-53.49-11.87-80.36q-1.68-12.52-3.24-18.71-2.04-8.12-5.53-18.24c-1.03-3 .8-6.25 3.26-8.16z","M1013.69 1150.31c-4.8-2.61-4.66-16.17-4.36-20.75 2.34-36.49 3.44-73.94 1.04-110.45-1.03-15.55.02-31.49.62-47.06q.03-.66.25-.03c2.28 6.45 4.52 12.88 7.39 19.11 5.12 11.14 11.5 22.91 14.83 33.92q2.34 7.74 3.97 16.46 5.3 28.43 5.62 56.09c.2 18.32-7.9 40-22.63 51.79q-3.42 2.73-6.73.92z","M1014.14 1164.37c7-1.83 14.1 2.2 14.11 9.95q.06 29.04-5.62 57.41c-3.87 19.28-6.24 38.23-8.43 57.48a.37.37 0 01-.74-.01q-3.12-43.48-3.58-86.64-.15-14.16.76-28.3c.18-2.83.02-8.98 3.5-9.89z"],"right":["M1172.94 1149.31c-6.06-4.56-6.94-11.4-6.8-19.4.96-52.67-.49-105.31-3.54-157.9q-.04-.72.41-.16 7.96 10.07 15.43 20.44c9.11 12.64 13.61 28.98 15.78 44.21 4.96 34.71 3.75 72.94-5.97 106.5-1.97 6.82-9.18 10.93-15.31 6.31z","M1144.41 1147.33q-17.19-17.37-20.08-40.86-.89-7.22-.13-19.97 1.18-20.06 4.69-41.33c2.33-14.1 5.8-25.22 12.41-38.61q8.19-16.59 14.35-34.15a.14.13-37.7 01.26.03q1.01 15.71 1.26 31.44c.18 11.61-1.34 24.91-1.58 36.43-.72 34.7 1.22 62.05 2.06 93.19.17 6.32-1.1 26.1-13.24 13.83z","M1173.74 1161.73c6.88-2 14.34 3.23 11.98 10.91-2.24 7.3-4.78 14.44-5.99 21.96-5.07 31.52-8.04 63.18-14.13 94.6a.72.71-61.9 01-1.21.37c-.14-.14-.35-.39-.4-.59q-3.53-13.58-3.19-28.23 1.04-44.67 5.06-87.04c.58-6.1 1.93-10.25 7.88-11.98z","M1154.32 1165a1.58 1.57-84.6 01.97 1.18c.79 4.42 1.42 8.78 1.57 13.4.96 29.17-.47 62.66-2.04 90.23q-.78 13.79-1.39 19.52a.23.23 0 01-.45 0c-2.79-21.25-5.41-41.99-9.64-63.03-3.44-17.08-4.29-34.91-4.68-52.3-.19-8.37 8.99-11.61 15.66-9z"]},"ankles":{"left":["M998.25 1320.52c-4.62.24-8.17-1.08-8.78-6.28-1.6-13.81-.75-28.85-2.16-42.41q-.39-3.74.24-7.03a.69.69 0 011.23-.28c2.35 3.15 4.22 5.75 5.14 9.66 1.54 6.57 1.91 22.57 9.97 24.09q13.33 2.5 15.93-10.47c.92-4.57 1-12.33 5.05-17.25q.42-.51.42.15c.11 14.39.4 30.86-3.08 44.54-.79 3.13-3.31 4.23-6.51 4.4q-8.73.45-17.45.88z"],"right":["M1149.5 1319.51c-6.93-.63-6.82-18.08-7.14-23.7q-.73-12.53-.59-25.09.01-.71.45-.15 2.74 3.49 3.29 7.17c1.67 11.25 3.21 25.34 19.7 19.99 4.87-1.58 7.03-18.57 7.89-23.21.79-4.2 2.74-7 5.28-10.13a.56.56 0 01.98.22c1.12 4.6.04 12.39-.37 17.26-.92 10.77-.32 21.48-1.52 32.37q-.7 6.23-7.01 6.18-12.13-.11-20.96-.91z"]},"feet":{"left":["M962.87 1327.38q-.62-.51-.05-1.07l1.99-1.99q.39-.39.93-.41 25.66-.82 51.26 1 1.34.1 4.43 1.47.46.2.69.64 1.84 3.5 2.87 7.23c2.32 8.38-6.63 7.24-12.23 6.68q-15.37-1.53-30.5-4.56c-8.21-1.65-13.33-3.95-19.39-8.99z"],"right":["M1154.35 1341.35c-12.48 1.36-13.27-3.88-8.67-13.37 1.82-3.76 12.72-3.65 16.39-3.77q19.44-.63 38.9-.44c2.41.02 3.31 1 4.61 2.76q.32.44-.09.79c-5.43 4.67-10.52 7.17-17.95 8.74q-16.46 3.47-33.19 5.29z"]},"hands":{"left":["M789.41 726.84c3.98-6.79 9.89-14.6 16.56-20.14a.31.31 0 01.48.35c-4.39 11.06-5.38 21.94-14.02 30.72-5.82 5.93-10.7 9.81-19.04 8.57q-.55-.08-.59-.63c-.24-3.07-.26-7.29 3.1-8.85 4.82-2.26 10.72-5.28 13.51-10.02z","M807.27 745.31c17.61 3.49 2.75 13.52-.73 18.99q-10.05 15.82-21.86 30.37-1.56 1.92-2.52-.58a2.41 2.33-55.4 01-.16-.96q.2-5.26 2.75-9.71c6.94-12.09 13.12-24.52 19.72-36.79q.91-1.7 2.8-1.32z","M819.3 744.82c-7.79-6.06-14.51-12.4-11.88-23.38 3.07-12.83 14.66-20.7 25.14-26.38 9.57-5.18 37.61-.75 37.6 13.68q-.01 16.24-3.67 31.99c-2.38 10.26-4.49 16.44-16.87 16.3-10.71-.13-21.93-5.7-30.32-12.21z","M827.99 758.27a2.08 2.07 26.6 01.91 2.73q-10.47 22.03-19.66 45.04-2.25 5.63-8.23 6.74a1.45 1.44 84.3 01-1.7-1.4q-.1-4.29 1.51-8.31 7.3-18.34 13.86-36.96c.74-2.1 1.53-6.08 2.97-8.96q.26-.5.82-.57 5.05-.64 9.52 1.69z","M841.68 762.32a.76.75-79.1 01.6.89q-4.51 23.14-9.28 45.87c-.73 3.49-2.09 5.73-5.85 5.43q-.52-.04-.61-.56-.74-4.54-.32-7.21 2.89-18.57 5.59-37.18.38-2.65 1.67-8.22.13-.54.68-.44l7.52 1.42z","M854.75 799.53a.78.78 0 01-1.37-.02q-.91-1.75-1.15-4.29-1.62-16.58-1.2-33.25a.84.84 0 01.61-.78l7.09-1.93q.59-.16.56.45-.58 14.77-1.12 29.56c-.14 4.06-1.54 6.86-3.42 10.26z"],"right":["M1336.39 751.96c-8.72 4.49-29.38 10.28-33.61-3.6q-5.68-18.65-5.83-38.24c-.06-7.59 4.01-11.75 11.09-14.08 8.85-2.92 19.02-5.3 27.54-.35 8.74 5.09 18.39 11.28 22.45 21.01 3.05 7.3 3.34 13.66-1.78 20.01-5.21 6.47-12.49 11.45-19.86 15.25z","M1374.32 737.5c-8.05-8.14-9.61-19.67-13.85-30.75a.22.22 0 01.35-.24q10.3 8.96 17.1 20.77c2.57 4.47 9.08 7.59 13.57 9.79 3.11 1.52 2.96 5.9 2.71 8.73q-.05.52-.57.59c-8.87 1.17-13.48-2.98-19.31-8.89z","M1383.76 795.45c-.59-.21-.96-.17-1.39-.68-8.84-10.3-15.85-21.5-23.44-32.41-2.81-4.02-8.81-7.64-7.45-13.14q.15-.6.7-.84l7.85-3.44q.66-.29 1.13.25 2.36 2.73 4.17 6.49 7.36 15.23 16.89 31.47c2.33 3.96 3.04 7.59 2.32 11.85a.58.58 0 01-.78.45z","M1365.79 812.62c-2.7-.28-6.42-2.66-7.49-5.33q-8.74-21.76-19.85-45.74c-2.12-4.58 6.55-5.17 9.12-5.21 1.8-.03 1.93.71 2.38 2.18q5.72 18.34 15.35 42.12c.74 1.84 4.81 12.43.49 11.98z","M1308.16 759.17l7.44 2.1q.23.07.24.31.75 16.26-.86 32.41-.3 3-1.25 5.48a.79.79 0 01-1.42.12q-3.9-6.58-3.82-13.9.16-13.07-.83-26.11-.05-.57.5-.41z","M1340.07 814.35c-2.7.82-4.99-1.16-5.54-3.71q-5.06-23.49-9.82-47.47a.77.76-10.7 01.62-.9l7.52-1.38q.59-.11.73.47c2.08 8.53 3.26 19.85 4.22 25.75q2.09 12.92 3.19 21.14.34 2.54-.33 5.46a.86.84 88.4 01-.59.64z"]},"head":{"left":[],"right":[]},"hair":{"left":[],"right":[]}}}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/default_plan.json b/app/src/main/assets/ironlog/default_plan.json
new file mode 100644
index 0000000..50e1443
--- /dev/null
+++ b/app/src/main/assets/ironlog/default_plan.json
@@ -0,0 +1,263 @@
+{
+ "id": "aesthetic-split-default",
+ "name": "Aesthetic Split",
+ "description": "4 days, cutting phase, focused on lats, side delts, abs, and legs",
+ "days": [
+ {
+ "id": "push",
+ "label": "DAY 1",
+ "name": "PUSH",
+ "tag": "Chest · Shoulders · Triceps",
+ "color": "#FF4500",
+ "exercises": [
+ {
+ "name": "Incline Smith Press",
+ "sets": 4,
+ "reps": "8–10",
+ "isHeavy": true,
+ "muscleGroup": "Upper Chest",
+ "notes": "Full stretch at bottom, squeeze at top."
+ },
+ {
+ "name": "Cable Fly Low to High",
+ "sets": 3,
+ "reps": "12–15",
+ "muscleGroup": "Upper Chest",
+ "notes": "Cables at lowest point, pull upward in arc."
+ },
+ {
+ "name": "Cable Lateral Raise Single Arm",
+ "sets": 4,
+ "reps": "15",
+ "muscleGroup": "Side Delts",
+ "notes": "3-second negative. Lead with elbow."
+ },
+ {
+ "name": "DB Lateral Raise",
+ "sets": 3,
+ "reps": "15–20",
+ "muscleGroup": "Side Delts",
+ "notes": "Slight forward lean. Elbow leads."
+ },
+ {
+ "name": "Rope Pushdown",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Triceps",
+ "notes": "Flare rope at bottom. Elbows pinned."
+ },
+ {
+ "name": "Single Arm Overhead Extension",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Triceps",
+ "notes": "Long head stretch. Slow eccentric."
+ },
+ {
+ "name": "Weighted Cable Crunch",
+ "sets": 4,
+ "reps": "15–20",
+ "muscleGroup": "Abs",
+ "notes": "Crunch into hips not knees."
+ }
+ ]
+ },
+ {
+ "id": "pull",
+ "label": "DAY 2",
+ "name": "PULL",
+ "tag": "Lats · Upper Traps · Biceps",
+ "color": "#0080FF",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "sets": 4,
+ "reps": "6–8",
+ "isHeavy": true,
+ "muscleGroup": "Lats",
+ "notes": "Best lat builder. Add weight progressively."
+ },
+ {
+ "name": "Single Arm DB Row",
+ "sets": 4,
+ "reps": "10–12",
+ "muscleGroup": "Lats",
+ "notes": "Incline bench 30 degrees. Pull elbow back."
+ },
+ {
+ "name": "Single Arm Cable Pulldown",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Lats",
+ "notes": "Lie chest-down on incline bench."
+ },
+ {
+ "name": "DB Shrugs",
+ "sets": 4,
+ "reps": "15–20",
+ "isHeavy": true,
+ "muscleGroup": "Upper Traps",
+ "notes": "1-second hold at top."
+ },
+ {
+ "name": "Hammer Curl",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Biceps",
+ "notes": "Brachialis = thicker arm silhouette."
+ },
+ {
+ "name": "Incline DB Curl",
+ "sets": 3,
+ "reps": "10",
+ "muscleGroup": "Biceps",
+ "notes": "Full long head stretch. Builds the peak."
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "sets": 4,
+ "reps": "12–15",
+ "muscleGroup": "Abs",
+ "notes": "Add ankle weights when easy."
+ }
+ ]
+ },
+ {
+ "id": "legs",
+ "label": "DAY 3",
+ "name": "LEGS",
+ "tag": "Strength · Mobility · Dance and Run",
+ "color": "#00C170",
+ "exercises": [
+ {
+ "name": "Hip 90/90 Stretch",
+ "sets": 2,
+ "reps": "60s each side",
+ "isWarmup": true,
+ "muscleGroup": "Hip Mobility",
+ "notes": "Non-negotiable warmup."
+ },
+ {
+ "name": "Worlds Greatest Stretch",
+ "sets": 2,
+ "reps": "5 reps each side",
+ "isWarmup": true,
+ "muscleGroup": "Full Chain",
+ "notes": "T-spine plus hip flexor plus hamstring."
+ },
+ {
+ "name": "Bulgarian Split Squat",
+ "sets": 4,
+ "reps": "8–10 each leg",
+ "isHeavy": true,
+ "muscleGroup": "Quads Glutes",
+ "notes": "Front shin vertical. Go deep."
+ },
+ {
+ "name": "Romanian Deadlift",
+ "sets": 4,
+ "reps": "10",
+ "isHeavy": true,
+ "muscleGroup": "Hamstrings",
+ "notes": "Hip hinge equals running power."
+ },
+ {
+ "name": "Leg Press High Feet",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Glutes Hamstrings",
+ "notes": "High foot placement shifts load."
+ },
+ {
+ "name": "Lateral Band Walk",
+ "sets": 3,
+ "reps": "15 steps each way",
+ "muscleGroup": "Glute Med",
+ "notes": "Lateral stability for cutting."
+ },
+ {
+ "name": "Single Leg Calf Raise",
+ "sets": 4,
+ "reps": "20",
+ "muscleGroup": "Calves",
+ "notes": "On a step for full ROM."
+ },
+ {
+ "name": "Ankle Mobility Drill",
+ "sets": 2,
+ "reps": "60s each side",
+ "isWarmup": true,
+ "muscleGroup": "Ankles",
+ "notes": "Cooldown. Do not skip."
+ }
+ ]
+ },
+ {
+ "id": "upper",
+ "label": "DAY 4",
+ "name": "UPPER",
+ "tag": "Aesthetic Focus · Arms · Abs",
+ "color": "#A020F0",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up or Lat Pulldown",
+ "sets": 4,
+ "reps": "8",
+ "isHeavy": true,
+ "muscleGroup": "Lats",
+ "notes": "Second lat session. Full stretch."
+ },
+ {
+ "name": "Cable Lateral Raise Single Arm",
+ "sets": 4,
+ "reps": "15",
+ "muscleGroup": "Side Delts",
+ "notes": "Second hit this week. 3s negative."
+ },
+ {
+ "name": "DB Shrugs",
+ "sets": 3,
+ "reps": "20",
+ "isHeavy": true,
+ "muscleGroup": "Upper Traps",
+ "notes": "Push weight up from Pull day."
+ },
+ {
+ "name": "Preacher Curl",
+ "sets": 3,
+ "reps": "10–12",
+ "muscleGroup": "Biceps",
+ "notes": "No cheating possible."
+ },
+ {
+ "name": "Rope Overhead Extension",
+ "sets": 3,
+ "reps": "12",
+ "muscleGroup": "Triceps",
+ "notes": "Long head. Makes arms look big."
+ },
+ {
+ "name": "Weighted Cable Crunch",
+ "sets": 4,
+ "reps": "15–20",
+ "muscleGroup": "Abs",
+ "notes": "Heavier than Push day."
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "sets": 4,
+ "reps": "15",
+ "muscleGroup": "Abs",
+ "notes": "Add ankle weights."
+ },
+ {
+ "name": "Ab Wheel Rollout",
+ "sets": 3,
+ "reps": "10",
+ "muscleGroup": "Full Core",
+ "notes": "Hardest ab exercise."
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/exercise_filter_rules.json b/app/src/main/assets/ironlog/exercise_filter_rules.json
new file mode 100644
index 0000000..d4923c5
--- /dev/null
+++ b/app/src/main/assets/ironlog/exercise_filter_rules.json
@@ -0,0 +1,760 @@
+{
+ "MUSCLE_FILTER_OPTIONS": [
+ "Chest",
+ "Upper Chest",
+ "Mid Chest",
+ "Lower Chest",
+ "Back",
+ "Lats",
+ "Upper Back",
+ "Traps",
+ "Spinal Erectors",
+ "Shoulders",
+ "Front Delts",
+ "Side Delts",
+ "Rear Delts",
+ "Rotator Cuff",
+ "Arms",
+ "Biceps",
+ "Biceps Long Head",
+ "Biceps Short Head",
+ "Brachialis",
+ "Triceps",
+ "Triceps Long Head",
+ "Triceps Lateral Head",
+ "Triceps Medial Head",
+ "Forearms",
+ "Core",
+ "Upper Abs",
+ "Lower Abs",
+ "Obliques",
+ "Serratus",
+ "Legs",
+ "Quads",
+ "Hamstrings",
+ "Glutes",
+ "Calves",
+ "Adductors",
+ "Abductors"
+ ],
+ "RULES": [
+ {
+ "patterns": [
+ "serratus"
+ ],
+ "tags": [
+ "Chest",
+ "Serratus"
+ ]
+ },
+ {
+ "patterns": [
+ "upper chest",
+ "clavicular chest"
+ ],
+ "tags": [
+ "Chest",
+ "Upper Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "mid chest",
+ "middle chest"
+ ],
+ "tags": [
+ "Chest",
+ "Mid Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "lower chest",
+ "sternal chest"
+ ],
+ "tags": [
+ "Chest",
+ "Lower Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "pec",
+ "pectoral",
+ "chest"
+ ],
+ "tags": [
+ "Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "lats",
+ "lat"
+ ],
+ "tags": [
+ "Back",
+ "Lats"
+ ]
+ },
+ {
+ "patterns": [
+ "upper back",
+ "middle back",
+ "mid back",
+ "rhomboid"
+ ],
+ "tags": [
+ "Back",
+ "Upper Back"
+ ]
+ },
+ {
+ "patterns": [
+ "trap",
+ "trapezius"
+ ],
+ "tags": [
+ "Back",
+ "Traps"
+ ]
+ },
+ {
+ "patterns": [
+ "lower back",
+ "spinal erector",
+ "erector"
+ ],
+ "tags": [
+ "Back",
+ "Spinal Erectors"
+ ]
+ },
+ {
+ "patterns": [
+ "back"
+ ],
+ "tags": [
+ "Back"
+ ]
+ },
+ {
+ "patterns": [
+ "front delt",
+ "anterior delt",
+ "shoulder front",
+ "shoulder - front"
+ ],
+ "tags": [
+ "Shoulders",
+ "Front Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "side delt",
+ "lateral delt",
+ "medial delt",
+ "shoulder side",
+ "shoulder - side"
+ ],
+ "tags": [
+ "Shoulders",
+ "Side Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "rear delt",
+ "posterior delt",
+ "shoulder back",
+ "shoulder - back"
+ ],
+ "tags": [
+ "Shoulders",
+ "Rear Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "rotator cuff",
+ "external shoulder rotation",
+ "internal shoulder rotation"
+ ],
+ "tags": [
+ "Shoulders",
+ "Rotator Cuff"
+ ]
+ },
+ {
+ "patterns": [
+ "shoulder",
+ "deltoid",
+ "delt"
+ ],
+ "tags": [
+ "Shoulders"
+ ]
+ },
+ {
+ "patterns": [
+ "biceps long head",
+ "long head biceps"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps",
+ "Biceps Long Head"
+ ]
+ },
+ {
+ "patterns": [
+ "biceps short head",
+ "short head biceps"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps",
+ "Biceps Short Head"
+ ]
+ },
+ {
+ "patterns": [
+ "brachialis"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps",
+ "Brachialis"
+ ]
+ },
+ {
+ "patterns": [
+ "biceps",
+ "bicep"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps"
+ ]
+ },
+ {
+ "patterns": [
+ "triceps long head",
+ "long head triceps"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps",
+ "Triceps Long Head"
+ ]
+ },
+ {
+ "patterns": [
+ "triceps lateral",
+ "lateral head triceps"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps",
+ "Triceps Lateral Head"
+ ]
+ },
+ {
+ "patterns": [
+ "triceps medial",
+ "medial head triceps"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps",
+ "Triceps Medial Head"
+ ]
+ },
+ {
+ "patterns": [
+ "triceps",
+ "tricep"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps"
+ ]
+ },
+ {
+ "patterns": [
+ "forearm",
+ "wrist",
+ "hand"
+ ],
+ "tags": [
+ "Arms",
+ "Forearms"
+ ]
+ },
+ {
+ "patterns": [
+ "upper abs"
+ ],
+ "tags": [
+ "Core",
+ "Upper Abs"
+ ]
+ },
+ {
+ "patterns": [
+ "lower abs"
+ ],
+ "tags": [
+ "Core",
+ "Lower Abs"
+ ]
+ },
+ {
+ "patterns": [
+ "oblique"
+ ],
+ "tags": [
+ "Core",
+ "Obliques"
+ ]
+ },
+ {
+ "patterns": [
+ "abdominal",
+ "abs",
+ "core"
+ ],
+ "tags": [
+ "Core"
+ ]
+ },
+ {
+ "patterns": [
+ "quad",
+ "quadriceps"
+ ],
+ "tags": [
+ "Legs",
+ "Quads"
+ ]
+ },
+ {
+ "patterns": [
+ "hamstring"
+ ],
+ "tags": [
+ "Legs",
+ "Hamstrings"
+ ]
+ },
+ {
+ "patterns": [
+ "glute",
+ "gluteus"
+ ],
+ "tags": [
+ "Legs",
+ "Glutes"
+ ]
+ },
+ {
+ "patterns": [
+ "calf",
+ "tibialis"
+ ],
+ "tags": [
+ "Legs",
+ "Calves"
+ ]
+ },
+ {
+ "patterns": [
+ "adductor",
+ "thigh inner",
+ "groin"
+ ],
+ "tags": [
+ "Legs",
+ "Adductors"
+ ]
+ },
+ {
+ "patterns": [
+ "abductor",
+ "thigh outer",
+ "hip abduction"
+ ],
+ "tags": [
+ "Legs",
+ "Abductors"
+ ]
+ },
+ {
+ "patterns": [
+ "legs"
+ ],
+ "tags": [
+ "Legs"
+ ]
+ }
+ ],
+ "NAME_HINTS": [
+ {
+ "patterns": [
+ "incline bench",
+ "incline press",
+ "incline fly"
+ ],
+ "tags": [
+ "Chest",
+ "Upper Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "decline bench",
+ "decline press"
+ ],
+ "tags": [
+ "Chest",
+ "Lower Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "bench press",
+ "chest press",
+ "push up",
+ "push-up"
+ ],
+ "tags": [
+ "Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "face pull",
+ "reverse fly",
+ "rear delt row"
+ ],
+ "tags": [
+ "Shoulders",
+ "Rear Delts",
+ "Back",
+ "Upper Back"
+ ]
+ },
+ {
+ "patterns": [
+ "shrug"
+ ],
+ "tags": [
+ "Back",
+ "Traps"
+ ]
+ },
+ {
+ "patterns": [
+ "pullover"
+ ],
+ "tags": [
+ "Back",
+ "Lats",
+ "Chest"
+ ]
+ },
+ {
+ "patterns": [
+ "lat pulldown",
+ "pull-up",
+ "pull up",
+ "chin-up",
+ "chin up"
+ ],
+ "tags": [
+ "Back",
+ "Lats",
+ "Arms",
+ "Biceps"
+ ]
+ },
+ {
+ "patterns": [
+ "high row",
+ "t-bar",
+ "row"
+ ],
+ "tags": [
+ "Back",
+ "Upper Back"
+ ]
+ },
+ {
+ "patterns": [
+ "upright row"
+ ],
+ "tags": [
+ "Back",
+ "Traps",
+ "Shoulders",
+ "Side Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "lateral raise"
+ ],
+ "tags": [
+ "Shoulders",
+ "Side Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "front raise"
+ ],
+ "tags": [
+ "Shoulders",
+ "Front Delts"
+ ]
+ },
+ {
+ "patterns": [
+ "curl"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps"
+ ]
+ },
+ {
+ "patterns": [
+ "hammer curl"
+ ],
+ "tags": [
+ "Arms",
+ "Biceps",
+ "Brachialis",
+ "Forearms"
+ ]
+ },
+ {
+ "patterns": [
+ "pushdown"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps",
+ "Triceps Lateral Head",
+ "Triceps Medial Head"
+ ]
+ },
+ {
+ "patterns": [
+ "overhead tricep extension",
+ "overhead triceps extension",
+ "skull crusher"
+ ],
+ "tags": [
+ "Arms",
+ "Triceps",
+ "Triceps Long Head"
+ ]
+ },
+ {
+ "patterns": [
+ "wood chop",
+ "woodchop",
+ "twist",
+ "rotation"
+ ],
+ "tags": [
+ "Core",
+ "Obliques"
+ ]
+ },
+ {
+ "patterns": [
+ "crunch"
+ ],
+ "tags": [
+ "Core",
+ "Upper Abs"
+ ]
+ },
+ {
+ "patterns": [
+ "leg raise",
+ "hanging knee raise"
+ ],
+ "tags": [
+ "Core",
+ "Lower Abs"
+ ]
+ },
+ {
+ "patterns": [
+ "deadlift",
+ "romanian deadlift",
+ "rdl"
+ ],
+ "tags": [
+ "Legs",
+ "Hamstrings",
+ "Glutes",
+ "Back",
+ "Spinal Erectors"
+ ]
+ },
+ {
+ "patterns": [
+ "hip thrust",
+ "glute bridge",
+ "glute kickback"
+ ],
+ "tags": [
+ "Legs",
+ "Glutes"
+ ]
+ },
+ {
+ "patterns": [
+ "belt squat",
+ "hack squat",
+ "leg press",
+ "squat"
+ ],
+ "tags": [
+ "Legs",
+ "Quads"
+ ]
+ },
+ {
+ "patterns": [
+ "lunge",
+ "split squat"
+ ],
+ "tags": [
+ "Legs",
+ "Quads",
+ "Glutes"
+ ]
+ },
+ {
+ "patterns": [
+ "hip adduction"
+ ],
+ "tags": [
+ "Legs",
+ "Adductors"
+ ]
+ },
+ {
+ "patterns": [
+ "hip abduction",
+ "lateral walk"
+ ],
+ "tags": [
+ "Legs",
+ "Abductors",
+ "Glutes"
+ ]
+ },
+ {
+ "patterns": [
+ "calf raise"
+ ],
+ "tags": [
+ "Legs",
+ "Calves"
+ ]
+ }
+ ],
+ "CATEGORY_RULES": [
+ {
+ "patterns": [
+ "cardio",
+ "conditioning",
+ "distance",
+ "duration",
+ "metcon"
+ ],
+ "tag": "Cardio"
+ },
+ {
+ "patterns": [
+ "stretch",
+ "mobility"
+ ],
+ "tag": "Mobility"
+ },
+ {
+ "patterns": [
+ "olympic"
+ ],
+ "tag": "Olympic"
+ },
+ {
+ "patterns": [
+ "strength",
+ "weight",
+ "rep",
+ "powerlifting"
+ ],
+ "tag": "Strength"
+ }
+ ],
+ "EQUIPMENT_RULES": [
+ {
+ "patterns": [
+ "barbell",
+ "trap bar",
+ "landmine"
+ ],
+ "tag": "Barbell"
+ },
+ {
+ "patterns": [
+ "dumbbell"
+ ],
+ "tag": "Dumbbell"
+ },
+ {
+ "patterns": [
+ "cable"
+ ],
+ "tag": "Cable"
+ },
+ {
+ "patterns": [
+ "machine",
+ "smith"
+ ],
+ "tag": "Machine"
+ },
+ {
+ "patterns": [
+ "bodyweight",
+ "body only",
+ "ring",
+ "rings",
+ "dip bar",
+ "pull-up bar"
+ ],
+ "tag": "Bodyweight"
+ },
+ {
+ "patterns": [
+ "band"
+ ],
+ "tag": "Band"
+ },
+ {
+ "patterns": [
+ "kettlebell"
+ ],
+ "tag": "Kettlebell"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/exercise_id_map.json b/app/src/main/assets/ironlog/exercise_id_map.json
new file mode 100644
index 0000000..807afe1
--- /dev/null
+++ b/app/src/main/assets/ironlog/exercise_id_map.json
@@ -0,0 +1,215 @@
+{
+ "Barbell Bench Press": "Barbell_Bench_Press_-_Medium_Grip",
+ "Incline Barbell Bench Press": "Incline_Barbell_Bench_Press",
+ "DB Bench Press": "Dumbbell_Bench_Press",
+ "Incline DB Bench Press": "Incline_Dumbbell_Bench_Press",
+ "Cable Fly Low to High": null,
+ "Cable Fly": "Cable_Fly",
+ "Pec Deck": "Pec_Deck_Fly",
+ "Incline Smith Press": "Smith_Machine_Bench_Press",
+ "Push-Up": "Push-Up",
+ "Dips (Chest)": "Dips_-_Chest_Version",
+ "Pull-Up": "Pull-Up",
+ "Weighted Pull-Up": "Weighted_Pull_Ups",
+ "Chin-Up": "Chin-Up",
+ "Lat Pulldown": "Wide-Grip_Lat_Pulldown",
+ "Single Arm Cable Pulldown": "Close-Grip_Front_Lat_Pulldown",
+ "Barbell Row": "Barbell_Bent_Over_Row",
+ "Single Arm DB Row": "One-Arm_Dumbbell_Row",
+ "Seated Cable Row": "Seated_Cable_Rows",
+ "Face Pull": "Face_Pull",
+ "Straight Arm Pulldown": "Straight-Arm_Pulldown",
+ "Deadlift": "Barbell_Deadlift",
+ "Sumo Deadlift": "Sumo_Deadlift",
+ "Hyperextension": "Hyperextensions_With_No_Hyperextension_Bench",
+ "Meadows Row": null,
+ "Chest Supported Row": "Lying_T-Bar_Row",
+ "Barbell OHP": "Barbell_Shoulder_Press",
+ "DB OHP": "Dumbbell_Shoulder_Press",
+ "Arnold Press": "Arnold_Dumbbell_Press",
+ "Cable Lateral Raise": "Cable_Internal_Rotation",
+ "DB Lateral Raise": "Side_Lateral_Raise",
+ "Lateral Raise Machine": "Side_Lateral_Raise",
+ "Rear Delt Fly": "Bent_Over_Dumbbell_Rear_Lateral_Raise",
+ "Reverse Pec Deck": "Reverse_Flyes",
+ "DB Shrugs": "Dumbbell_Shrug",
+ "Barbell Shrugs": "Barbell_Shrug",
+ "Barbell Curl": "Barbell_Curl",
+ "EZ Bar Curl": "EZ-Bar_Curl",
+ "DB Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Hammer Curl": "Hammer_Curls",
+ "Incline DB Curl": "Incline_Dumbbell_Curl",
+ "Concentration Curl": "Concentration_Curls",
+ "Preacher Curl": "Preacher_Curl",
+ "Cable Curl": "Low_Cable_Curl",
+ "Spider Curl": "Spider_Curl",
+ "Zottman Curl": "Zottman_Curl",
+ "Close Grip Bench Press": "Close-Grip_Barbell_Bench_Press",
+ "Skull Crusher": "Barbell_Skullcrusher",
+ "Rope Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Single Arm Pushdown": "Triceps_Pushdown",
+ "Rope Overhead Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Single Arm OHE": "Overhead_Triceps",
+ "Dips (Triceps)": "Triceps_Dips",
+ "Diamond Push-Up": "Close-Grip_Push-Up_off_of_a_Dumbbell",
+ "Back Squat": "Barbell_Full_Squat",
+ "Front Squat": "Front_Barbell_Squat",
+ "Bulgarian Split Squat": null,
+ "Romanian Deadlift": "Romanian_Deadlift",
+ "Leg Press": "Leg_Press",
+ "Leg Press High Feet": "Leg_Press",
+ "Hack Squat": "Hack_Squat",
+ "Leg Extension": "Leg_Extensions",
+ "Leg Curl Machine": "Seated_Leg_Curl",
+ "Nordic Curl": "Natural_Glute_Ham_Raise",
+ "Hip Thrust": "Barbell_Hip_Thrust",
+ "Walking Lunge": "Barbell_Walking_Lunge",
+ "Step Up": "Barbell_Step_Ups",
+ "Lateral Band Walk": null,
+ "Single Leg Calf Raise": "Standing_Calf_Raises",
+ "Standing Calf Raise": "Standing_Calf_Raises",
+ "Seated Calf Raise": "Seated_Calf_Raise",
+ "Weighted Cable Crunch": "Cable_Crunch",
+ "Hanging Leg Raise": "Hanging_Leg_Raise",
+ "Ab Wheel Rollout": "Barbell_Ab_Rollout",
+ "Plank": "Plank",
+ "Side Plank": "Side_Plank",
+ "Dragon Flag": "Dragon_Flag",
+ "L-Sit": null,
+ "Toes to Bar": null,
+ "Russian Twist": "Russian_Twist",
+ "Dead Bug": "Dead_Bug",
+ "V-Up": "V_Up",
+ "Hip 90/90 Stretch": null,
+ "World's Greatest Stretch": "Worlds_Greatest_Stretch",
+ "Ankle Mobility Drill": null,
+ "Cat Cow": null,
+ "Couch Stretch": null,
+ "Deep Squat Hold": null,
+ "Incline Treadmill Walk": null,
+ "Running": null,
+ "Weighted Pull-Up or Lat Pulldown": "Wide-Grip_Lat_Pulldown",
+ "Pullups": "Pull-Up",
+ "Pushups": "Push-Up",
+ "Seated Cable Rows": "Seated_Cable_Rows",
+ "Leg Extensions": "Leg_Extensions",
+ "Hammer Curls": "Hammer_Curls",
+ "Weighted Pull Ups": "Weighted_Pull_Ups",
+ "Worlds Greatest Stretch": "Worlds_Greatest_Stretch",
+ "Bench Press - Smith Machine": "Smith_Machine_Bench_Press",
+ "Smith Machine Bench Press": "Smith_Machine_Bench_Press",
+ "Squat - Smith Machine": "Smith_Machine_Squat",
+ "Smith Machine Squat": "Smith_Machine_Squat",
+ "Hack Squat - Barbell": "Barbell_Hack_Squat",
+ "Barbell Rear Delt Row": "Rear_Delt_Row_-_Barbell",
+ "Cable Lateral Raise (Single Arm)": "Cable_Internal_Rotation",
+ "Machine Lateral Raise": "Side_Lateral_Raise",
+ "Assisted Pull-Up Machine": "Assisted_Pull-Up",
+
+ "Overhead Press": "Barbell_Shoulder_Press",
+ "Military Press": "Barbell_Shoulder_Press",
+ "Barbell Overhead Press": "Barbell_Shoulder_Press",
+ "Barbell Shoulder Press": "Barbell_Shoulder_Press",
+ "Shoulder Press": "Dumbbell_Shoulder_Press",
+ "Dumbbell Overhead Press": "Dumbbell_Shoulder_Press",
+ "DB Overhead Press": "Dumbbell_Shoulder_Press",
+ "Seated Dumbbell Press": "Dumbbell_Shoulder_Press",
+ "Seated DB Press": "Dumbbell_Shoulder_Press",
+ "Dumbbell Shoulder Press": "Dumbbell_Shoulder_Press",
+
+ "Dumbbell Bench Press": "Dumbbell_Bench_Press",
+ "Flat Dumbbell Press": "Dumbbell_Bench_Press",
+ "Flat Dumbbell Bench Press": "Dumbbell_Bench_Press",
+ "Flat Bench Press": "Barbell_Bench_Press_-_Medium_Grip",
+ "BB Bench Press": "Barbell_Bench_Press_-_Medium_Grip",
+ "Bench Press": "Barbell_Bench_Press_-_Medium_Grip",
+ "Incline Dumbbell Press": "Incline_Dumbbell_Bench_Press",
+ "Incline Dumbbell Bench Press": "Incline_Dumbbell_Bench_Press",
+ "Incline DB Press": "Incline_Dumbbell_Bench_Press",
+ "Incline Press": "Incline_Barbell_Bench_Press",
+ "Chest Fly": "Pec_Deck_Fly",
+ "Dumbbell Fly": "Pec_Deck_Fly",
+ "Pec Fly": "Pec_Deck_Fly",
+ "Cable Crossover": "Cable_Fly",
+
+ "Bent Over Row": "Barbell_Bent_Over_Row",
+ "Bent-Over Row": "Barbell_Bent_Over_Row",
+ "Bent Over Barbell Row": "Barbell_Bent_Over_Row",
+ "BB Row": "Barbell_Bent_Over_Row",
+ "Dumbbell Row": "One-Arm_Dumbbell_Row",
+ "One Arm Dumbbell Row": "One-Arm_Dumbbell_Row",
+ "Single-Arm Dumbbell Row": "One-Arm_Dumbbell_Row",
+ "Single Arm Row": "One-Arm_Dumbbell_Row",
+ "DB Row": "One-Arm_Dumbbell_Row",
+ "Cable Row": "Seated_Cable_Rows",
+ "Machine Row": "Seated_Cable_Rows",
+ "Seated Row": "Seated_Cable_Rows",
+ "Low Cable Row": "Seated_Cable_Rows",
+ "Pulldown": "Wide-Grip_Lat_Pulldown",
+ "Pull Down": "Wide-Grip_Lat_Pulldown",
+ "Lat Pulldown (Wide Grip)": "Wide-Grip_Lat_Pulldown",
+ "Cable Lat Pulldown": "Wide-Grip_Lat_Pulldown",
+ "Machine Lat Pulldown": "Wide-Grip_Lat_Pulldown",
+ "T-Bar Row": "Lying_T-Bar_Row",
+ "Back Extension": "Hyperextensions_With_No_Hyperextension_Bench",
+ "Hyperextension": "Hyperextensions_With_No_Hyperextension_Bench",
+ "Deadlifts": "Barbell_Deadlift",
+ "Barbell Deadlift": "Barbell_Deadlift",
+ "Straight Leg Deadlift": "Romanian_Deadlift",
+ "Romanian Deadlifts": "Romanian_Deadlift",
+ "RDL": "Romanian_Deadlift",
+
+ "Lateral Raise": "Side_Lateral_Raise",
+ "Dumbbell Lateral Raise": "Side_Lateral_Raise",
+ "DB Lateral Raise (Cable)": "Cable_Internal_Rotation",
+ "Rear Delt Row": "Rear_Delt_Row_-_Barbell",
+ "Rear Delt Raise": "Bent_Over_Dumbbell_Rear_Lateral_Raise",
+ "Reverse Fly": "Reverse_Flyes",
+ "Reverse Dumbbell Fly": "Reverse_Flyes",
+
+ "Dumbbell Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Dumbbell Bicep Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Alternating Dumbbell Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Alternating DB Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Bicep Curl": "Dumbbell_Alternate_Bicep_Curl",
+ "Incline Bicep Curl": "Incline_Dumbbell_Curl",
+ "Incline Curl": "Incline_Dumbbell_Curl",
+ "Cable Bicep Curl": "Low_Cable_Curl",
+ "Skull Crushers": "Barbell_Skullcrusher",
+ "Tricep Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Cable Tricep Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Triceps Rope Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Rope Tricep Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Tricep Rope Pushdown": "Triceps_Pushdown_-_Rope_Attachment",
+ "Triceps Pushdown": "Triceps_Pushdown",
+ "Overhead Tricep Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Overhead Triceps Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Tricep Overhead Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Cable Overhead Tricep Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Rope Overhead Tricep Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Tricep Extension": "Cable_Rope_Overhead_Triceps_Extension",
+ "Tricep Dips": "Triceps_Dips",
+ "Bench Dips": "Triceps_Dips",
+ "Close Grip Press": "Close-Grip_Barbell_Bench_Press",
+ "Close Grip Bench": "Close-Grip_Barbell_Bench_Press",
+
+ "Squat": "Barbell_Full_Squat",
+ "Barbell Squat": "Barbell_Full_Squat",
+ "High Bar Squat": "Barbell_Full_Squat",
+ "Low Bar Squat": "Barbell_Full_Squat",
+ "Leg Curls": "Seated_Leg_Curl",
+ "Hamstring Curl": "Seated_Leg_Curl",
+ "Lying Leg Curl": "Seated_Leg_Curl",
+ "Hip Thrust (Barbell)": "Barbell_Hip_Thrust",
+ "Glute Bridge": "Barbell_Hip_Thrust",
+ "Barbell Glute Bridge": "Barbell_Hip_Thrust",
+ "Lunge": "Barbell_Walking_Lunge",
+ "Walking Lunges": "Barbell_Walking_Lunge",
+ "Calf Raise": "Standing_Calf_Raises",
+ "Calf Raises": "Standing_Calf_Raises",
+
+ "Cable Crunch": "Cable_Crunch",
+ "Hanging Leg Raises": "Hanging_Leg_Raise",
+ "Ab Rollout": "Barbell_Ab_Rollout",
+ "Ab Wheel": "Barbell_Ab_Rollout"
+}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/exercise_library_additions.json b/app/src/main/assets/ironlog/exercise_library_additions.json
new file mode 100644
index 0000000..63f85ab
--- /dev/null
+++ b/app/src/main/assets/ironlog/exercise_library_additions.json
@@ -0,0 +1,1424 @@
+[
+ {
+ "id": "longhaul_bench_press_smith_machine",
+ "name": "Bench Press - Smith Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "chest",
+ "front delts"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "triceps"
+ ],
+ "instructions": [
+ "Set up a bench under a Smith machine so that the bar is over your chest while lying on the bench.",
+ "Lie down on the bench with your feet flat on the floor and your back pressed against the bench.",
+ "Extend your arms and grip the bar with your hands slightly wider than shoulder-width apart, palms facing forward.",
+ "Unrack the bar by straightening your arms and lifting it off the rack.",
+ "Lower the bar slowly towards your chest, keeping your elbows wide.",
+ "Pause for a moment when the bar touches your chest.",
+ "Push the bar back up to the starting position by extending your arms fully.",
+ "Repeat the movement for the desired number of repetitions.",
+ "Once finished, carefully rack the bar back onto the Smith machine."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_calf_raise_leg_press_machine",
+ "name": "Calf Raise - Leg Press Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "calves"
+ ],
+ "primaryMuscle": "calves",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Sit on the leg press machine and position your feet about hip-width apart on the lower part of the platform.",
+ "Ensure that only the balls of your feet and your toes are making contact with the platform, with your heels hanging off.",
+ "Straighten your legs to release the safety bars of the machine, keeping your knees slightly bent to avoid locking them.",
+ "Press through the balls of your feet to push the platform away, raising your heels as high as possible and contracting your calf muscles.",
+ "Pause at the top of the movement for a moment to maximize the contraction in the calves.",
+ "Slowly lower your heels back below the level of the platform to return to the starting position and stretch your calf muscles.",
+ "Repeat for the desired number of reps."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_close_grip_feet_up_bench_press_barbell",
+ "name": "Close-Grip Feet-Up Bench Press - Barbell",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "triceps"
+ ],
+ "primaryMuscle": "triceps",
+ "secondaryMuscles": [
+ "chest",
+ "front delts"
+ ],
+ "instructions": [
+ "Lie flat on a bench with your feet up and your back pressed against the bench.",
+ "Grasp the barbell with your hands shoulder-width apart or just slightly narrower.",
+ "Unrack the barbell and hold it above your chest with your arms extended.",
+ "Lower the barbell to your chest, keeping your elbows close to your body.",
+ "Pause briefly at the bottom of the movement, then press the barbell back up to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_deadlift_trap_bar_high_handles",
+ "name": "Deadlift - Trap Bar High Handles",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "hamstrings",
+ "lower back"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves",
+ "forearms",
+ "traps",
+ "quadriceps"
+ ],
+ "instructions": [
+ "Stand in the center of a loaded trap bar with your feet about hip-width apart.",
+ "Bend at your hips and knees to lower your body, maintaining a flat back, to grasp the high handles of the trap bar.",
+ "Look forward, keeping your chest up, and straighten your back to prepare for the lift.",
+ "Drive through your heels to stand up straight, extending your hips and knees simultaneously while keeping the core engaged.",
+ "At the top of the movement, stand fully upright with your shoulders back.",
+ "Pause briefly at the top of the lift before initiating the return.",
+ "Lower the bar by bending at the hips first, then the knees, maintaining a flat back and controlled movement until the weights are back on the ground.",
+ "Reset your posture and prepare for the next repetition."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_deadlift_trap_bar_low_handles",
+ "name": "Deadlift - Trap Bar Low Handles",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "hamstrings",
+ "lower back"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves",
+ "forearms",
+ "traps",
+ "quadriceps"
+ ],
+ "instructions": [
+ "Stand in the center of a loaded trap bar with your feet about hip-width apart.",
+ "Bend at your hips and knees to lower your body, maintaining a flat back, to grasp the low handles of the trap bar.",
+ "Look forward, keeping your chest up, and straighten your back to prepare for the lift.",
+ "Drive through your heels to stand up straight, extending your hips and knees simultaneously while keeping the core engaged.",
+ "At the top of the movement, stand fully upright with your shoulders back and the bar close to your body.",
+ "Pause briefly at the top of the lift before initiating the return.",
+ "Lower the bar by bending at the hips first, then the knees, maintaining a flat back and controlled movement until the weights are back on the ground.",
+ "Reset your posture and prepare for the next repetition."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_external_shoulder_rotation_band",
+ "name": "External Shoulder Rotation - Band",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Band",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Attach a resistance band to a stable object at waist height.",
+ "Stand perpendicular to the anchor point with your right arm farthest away from it, and your feet shoulder-width apart.",
+ "Reach across your body with your right hand and grab the band.",
+ "Create resistance in the band by bringing your right elbow close to your right side where it hangs naturally.",
+ "This starting position has you with your right forearm across the front of your body, at a 90-degree angle to your right upper-arm.",
+ "Keep your core engaged and your shoulders relaxed.",
+ "Slowly rotate your arms outward, away from your body, until your right hand is in line with your right shoulder.",
+ "Pause for a moment, then slowly return to the starting position.",
+ "Repeat for the desired number of repetitions and then switch sides."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_external_shoulder_rotation_cable",
+ "name": "External Shoulder Rotation - Cable",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [
+ "forearms",
+ "rear delts"
+ ],
+ "instructions": [
+ "Stand side-on to a cable machine, with the machine arm set at the middle height. Attach a single handle.",
+ "Grab the handle with the hand that's furthest from the machine, ensuring that your elbow is bent at a 90-degree angle.",
+ "Step away from the machine so that the weight is lifted slightly from its stack and there is tension on the cable.",
+ "Position your elbow so that it is close to your side and holding weight across your abdomen.",
+ "Slowly rotate your arm outward, pulling the handle away from the machine while keeping your elbow fixed at your side.",
+ "Rotate the arm until the hand as far as possible without releasing tension on your back rotator cuff and without compromising form.",
+ "Pause for a moment at the maximum rotation point.",
+ "Slowly return the handle to the starting position in a controlled manner without allowing the weight to pull your arm back too fast.",
+ "Repeat the exercise for the desired number of reps before switching sides to ensure both back rotator cuffs are worked evenly."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": [
+ "Keep your feet shoulder-width apart for stable footing and engage your core. Keep your body straight and avoid rotating your hips or shoulders during the movement. Your forearm should be perpendicular to your torso throughout the exercise."
+ ],
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_glute_kickback_machine",
+ "name": "Glute Kickback - Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "glutes"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "hamstrings",
+ "adductors"
+ ],
+ "instructions": [
+ "Adjust the machine to fit your body height",
+ "Position yourself in the machine with your hands on the handles and one ankle on the padding.",
+ "Keeping your core engaged, exhale and extend your leg back as far as possible while squeezing your glutes.",
+ "Inhale and slowly return your leg to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hack_squat_barbell",
+ "name": "Hack Squat - Barbell",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "quadriceps"
+ ],
+ "primaryMuscle": "quadriceps",
+ "secondaryMuscles": [
+ "calves",
+ "forearms",
+ "glutes",
+ "lower back",
+ "adductors",
+ "traps"
+ ],
+ "instructions": [
+ "Stand in front of the barbell with your feet shoulder-width apart. The barbell will be by the back of your calves.",
+ "Bend down and grip the barbell with an overhand grip, with your palms facing behind you.",
+ "Stand up straight, lifting the barbell off the ground and holding it behind your legs.",
+ "Keeping your back straight, lower your body by bending your knees and hips, as if you were sitting down on a chair, until your thighs are parallel to the ground.",
+ "Push through your heels to stand back up to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hack_squat_landmine",
+ "name": "Hack Squat - Landmine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Place the end of a barbell into a landmine attachment or securely anchor it in a corner.",
+ "Stand with your feet shoulder-width apart, toes slightly turned out.",
+ "Hold the unattached end of the barbell with both hands, palms facing inwards. Lift the end up and over one shoulder while you turn away from the weight. Rest the barbell on your shoulder with the weight at your back.",
+ "Keep your core engaged, chest lifted, and back straight.",
+ "Lower your body by bending at the knees and hips, as if sitting back into a chair.",
+ "Continue lowering until your thighs are parallel to the ground or slightly below.",
+ "Push through your heels and extend your knees and hips to return to the starting position.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hack_squat_machine",
+ "name": "Hack Squat - Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "glutes",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Adjust the seat height and foot platform of the machine to your desired position.",
+ "Sit on the machine with your back against the pad and grasp the handles with an overhand grip.",
+ "Engage your core throughout the exercise.",
+ "Bend your knees and lower your body down, keeping your back straight and your heels on the foot platform.",
+ "Continue descending until your thighs are parallel to the foot platform or as low as your flexibility allows.",
+ "Push through your heels and extend your legs to return to the starting position.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_high_to_low_wood_chop_cable",
+ "name": "High to Low Wood Chop - Cable",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "obliques"
+ ],
+ "primaryMuscle": "obliques",
+ "secondaryMuscles": [
+ "abdominals"
+ ],
+ "instructions": [
+ "Attach a cable to a high pulley and select the desired weight.",
+ "Stand perpendicular to the cable with feet shoulder-width apart and knees slightly bent.",
+ "Grasp the handle with both hands and extend arms overhead, keeping them straight.",
+ "Engage core muscles and rotate torso diagonally downwards, pulling the cable down towards the opposite hip.",
+ "Bend knees and pivot back foot as needed to maintain balance and stability.",
+ "Pause briefly at the bottom of the movement, then reverse the motion and return to starting position.",
+ "Repeat for desired number of repetitions, then switch sides and repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hip_abduction_band",
+ "name": "Hip Abduction - Band",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Band",
+ "primaryMuscles": [
+ "abductors"
+ ],
+ "primaryMuscle": "abductors",
+ "secondaryMuscles": [
+ "glutes"
+ ],
+ "instructions": [
+ "Start by placing an exercise band around both of your knees. Make sure the band is secure and does not slip during the exercise.",
+ "Sit on a bench with your feet hip-width apart and your toes pointing forward.",
+ "Exhale as you slowly press your knees outward, against the resistance of the exercise band.",
+ "Continue pressing until you feel a comfortable stretch in your outer hip and thigh muscles.",
+ "Pause for a brief moment at the outwardmost position, feeling the tension in the exercise band.",
+ "Inhale as you release the pressure and bring your knees back together, returning to the starting position.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hip_abduction_machine",
+ "name": "Hip Abduction - Machine",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "abductors"
+ ],
+ "primaryMuscle": "abductors",
+ "secondaryMuscles": [
+ "glutes"
+ ],
+ "instructions": [
+ "Adjust the machine to fit your height and leg length.",
+ "Sit on the machine with your back against the backrest and your feet on the footrests.",
+ "Press your legs outward against the resistance of the machine.",
+ "With your knees at their farthest point, hold the weight for a moment before slowly releasing the resistance and returning to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_hip_adduction_machine",
+ "name": "Hip Adduction - Machine",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "adductors"
+ ],
+ "primaryMuscle": "adductors",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Adjust the seat height of the hip adduction machine so that your knees are at a 90-degree angle when seated.",
+ "Sit on the machine with your back against the backrest and your feet flat on the footrests.",
+ "Place your thighs against the thigh pads, just above your knees.",
+ "Grasp the handles on the sides of the machine for stability.",
+ "Engage your core and squeeze your inner thighs together as you exhale.",
+ "Hold the contraction for a second and then slowly release as you inhale.",
+ "Repeat the movement for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_horizontal_external_shoulder_rotation_dumbbell",
+ "name": "Horizontal External Shoulder Rotation - Dumbbell",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Stand perpendicular to a bar set at a height just below shoulder level when standing.",
+ "Grip a dumbbell with your working hand, maintaining the 90-degree angle at the elbow.",
+ "Place the upper arm of your working side on the bar so that it is parallel to the ground and your elbow is bent at a 90-degree angle. Your forearm with dumbbell should be hanging vertically towards the floor.",
+ "Brace your core and keep your shoulder blades down and back to prevent them from rolling forward during the exercise.",
+ "Rotate your arm at the shoulder, lifting the dumbbell upwards while keeping your upper arm and elbow firmly in place on the bar.",
+ "Continue the rotation until your forearm is horizontal to the floor or as far as your shoulder flexibility allows without discomfort or compromising form.",
+ "Pause at the top of the movement, focusing on contracting the muscles around the shoulder.",
+ "Slowly reverse the motion, lowering the dumbbell back to the starting position with control to complete one repetition.",
+ "Perform the desired number of reps, then switch sides and repeat the exercise with the other arm."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_horizontal_internal_shoulder_rotation_dumbbell",
+ "name": "Horizontal Internal Shoulder Rotation - Dumbbell",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Lie on your back on a flat surface with a dumbbell nearby.",
+ "Raise one arm at the shoulder joint to your side so that your upper arm is perpendicular to your body. Bend your elbow at a 90-degree angle bringing your forearm perpendicular to the upper arm so that your hand is above your head on your supporting surface. This position is commonly known as as a single-arm \"cactus pose\".",
+ "Hold a dumbbell in your hand with your palm facing up towards the ceiling.",
+ "Slowly rotate your arm up towards the ceiling until it's perpendicular to the ground, keeping your elbow bent and your upper arm stationary.",
+ "Pause for a moment at the top of the movement, then slowly lower the dumbbell back to the starting position.",
+ "Repeat for the desired number of repetitions, then switch sides and repeat the exercise with your other arm."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_horizontal_wood_chop_band",
+ "name": "Horizontal Wood Chop - Band",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Band",
+ "primaryMuscles": [
+ "obliques"
+ ],
+ "primaryMuscle": "obliques",
+ "secondaryMuscles": [
+ "abdominals"
+ ],
+ "instructions": [
+ "Attach a resistance band to a sturdy anchor point at waist height.",
+ "Stand perpendicular to the anchor point with feet shoulder-width apart and knees slightly bent.",
+ "Hold the resistance band with both hands and extend arms out in front of the body.",
+ "Rotate the torso and pull the band across the body towards the opposite hip.",
+ "Keep the arms straight and engage the core muscles throughout the movement.",
+ "Slowly return to the starting position",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_horizontal_wood_chop_cable",
+ "name": "Horizontal Wood Chop - Cable",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "obliques"
+ ],
+ "primaryMuscle": "obliques",
+ "secondaryMuscles": [
+ "abdominals"
+ ],
+ "instructions": [
+ "Set up the cable machine by adjusting the cable to just under chest height and attach a handle.",
+ "Stand perpendicular to the cable machine with your feet shoulder-width apart, keeping your toes and head angled away from the machine.",
+ "Grip the handle with both hands, extending your arms fully. Begin with your upper body twisted so that your arms and the handle are positioned on the side closest to the machine, while your head and toes continue to face away.",
+ "Step away from the machine to create enough tension in the cable, ensuring it is taut before you start the exercise.",
+ "Rotate your torso while keeping your arms straight, moving the handle in a horizontal motion across your body until your hands are aligned forward, matching the direction of your toes and head.",
+ "Keep your core engaged throughout the movement to maintain stability and prevent any rotation in your hips or bending of the arms.",
+ "Complete the twisting motion until your arms are fully extended in front of you, parallel to the direction your toes and head are facing.",
+ "Slowly and with control, reverse the motion, returning to the twisted starting position while maintaining the alignment of your head and toes facing forward."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_incline_bench_press_smith_machine",
+ "name": "Incline Bench Press - Smith Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "chest",
+ "front delts"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "triceps"
+ ],
+ "instructions": [
+ "Adjust the height of the Smith machine bar to a comfortable level for the incline bench press.",
+ "Select the desired weight and load it onto the bar.",
+ "Lie down on the incline bench and position yourself under the bar.",
+ "Grip the bar with a slightly wider than shoulder-width grip and lift it off the rack.",
+ "Lower the bar down to your chest while keeping your elbows tucked in.",
+ "Push the bar back up to the starting position, keeping your core engaged and your back flat on the bench.",
+ "Repeat.",
+ "When finished, carefully rack the bar back onto the Smith machine."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_internal_shoulder_rotation_band",
+ "name": "Internal Shoulder Rotation - Band",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Band",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Attach a resistance band to a stable object at waist height.",
+ "Stand perpendicular to the anchor point with your right arm closest to it, and your feet shoulder-width apart.",
+ "Reach your right hand and grab the band.",
+ "Create resistance in the band by side-stepping away from the anchor point.",
+ "This starting position has your right forearm at a 90-degree angle to your right upper-arm. Your right forearm points to your right.",
+ "Keep your core engaged and your shoulders relaxed.",
+ "Slowly rotate your arms inward, toward your body, until your right hand is in line with your right shoulder.",
+ "Pause for a moment, then slowly return to the starting position.",
+ "Repeat for the desired number of repetitions and then switch sides."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_internal_shoulder_rotation_cable",
+ "name": "Internal Shoulder Rotation - Cable",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [
+ "forearms",
+ "front delts"
+ ],
+ "instructions": [
+ "Stand side-on to a cable machine, with the machine arm set at the middle height. Attach a single handle.",
+ "Grab the handle with the hand that's closest to the machine, ensuring that your elbow is bent at a 90-degree angle.",
+ "Step away from the machine so that the weight is lifted slightly from its stack and there is tension on the cable.",
+ "Position your elbow so that it is close to your side and your forearm points towards the machine as far as naturally possible.",
+ "Slowly rotate your arm inward, pulling the handle away from the machine while keeping your elbow fixed at your side.",
+ "Rotate the arm until the hand crosses your abdomen without releasing tension on your front rotator cuff and without compromising form.",
+ "Pause for a moment at the maximum rotation point.",
+ "Slowly return the handle to the starting position in a controlled manner without allowing the weight to pull your arm back too fast.",
+ "Repeat the exercise for the desired number of reps before switching sides to ensure both front rotator cuffs are worked evenly."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": [
+ "Keep your feet shoulder-width apart for stable footing and engage your core. Keep your body straight and avoid rotating your hips or shoulders during the movement. Your forearm should be perpendicular to your torso throughout the exercise."
+ ],
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_landmine_rotation",
+ "name": "Landmine Rotation",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "abdominals",
+ "obliques"
+ ],
+ "primaryMuscle": "abdominals",
+ "secondaryMuscles": [
+ "glutes",
+ "lower back",
+ "rotator cuff",
+ "front delts",
+ "side delts"
+ ],
+ "instructions": [
+ "Place one end of a barbell securely into a landmine attachment or a corner to stabilize it.",
+ "Stand with your feet shoulder-width apart, facing the end of the barbell, and grab the end of the bar with both hands.",
+ "Press the barbell up and hold it in front of your head with your arms extended, while keeping your elbows slightly bent.",
+ "Begin to rotate your torso to one side; as you do, allow your hands holding the barbell to drop towards the hip on the same side as the rotation. During the rotation, keep your arms in the same position, extended with elbows bent, as much as possible.",
+ "Simultaneously, allow the foot you are rotating away from to rise up to the ball of the foot at the bottom of the rotation, facilitating a full rotation of the hips.",
+ "Reverse the direction and rotate your torso to the opposite side, repeating the arm movement and foot pivot to complete one full repetition.",
+ "Continue alternating the rotational movements for the desired number of repetitions, maintaining the appropriate arm and foot mechanics throughout."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_leg_press_machine",
+ "name": "Leg Press - Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "glutes",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "hamstrings"
+ ],
+ "instructions": [
+ "Adjust the seat of the leg press machine so that your knees are at a ~90-degree angle when your feet are on the footplate.",
+ "Sit on the machine and place your feet shoulder-width apart on the footplate.",
+ "Push the footplate away from your body by extending your legs.",
+ "Lower the footplate back towards your body by bending your legs and keeping your feet flat on the plate.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": [
+ "Keep your back flat against the seat throughout the movement. Keep your feet flat on the footplate, and make sure your knees are tracking in line with your toes. Exhale as you push the footplate away from your body, and inhale as you lower it back down. Avoid locking out your knees at the top of the movement, as this can put unnecessary stress on the joint."
+ ],
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_lying_external_shoulder_rotation_dumbbell",
+ "name": "Lying External Shoulder Rotation - Dumbbell",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Lie on your side on a flat bench with your legs stacked, and your body straight as possible from head to toes.",
+ "Bend your upper arm (the one farthest from the bench) at a 90-degree angle at your elbow with your forearm parallel to the floor, and grasp a dumbbell with a your palm facing the floor.",
+ "Rotate your shoulder while keeping your elbow at a 90-degree angle, moving your forearm towards the ceiling and above your body.",
+ "Rotate your arm upward as far as comfortably possible without lifting your elbow off your torso or your body moving off its position.",
+ "Pause at the top of the movement for a brief moment.",
+ "Slowly return the dumbbell to the starting position by rotating the forearm back to the horizontal starting position while keeping the elbow angle constant.",
+ "Complete all the desired repetitions on one arm before switching to the other arm and repeating the steps."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": [
+ "Keep your elbow pinned to your torso throughout the exercise."
+ ],
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_lying_internal_shoulder_rotation_dumbbell",
+ "name": "Lying Internal Shoulder Rotation - Dumbbell",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [],
+ "instructions": [
+ "Lie on your side on a flat bench with your legs stacked, and your body straight as possible from head to toes.",
+ "Bend your lower arm (the one closest to the bench) at a 90-degree angle at your elbow, and grasp a dumbbell with a your palm facing the ceiling.",
+ "Rotate your shoulder while keeping your elbow at a 90-degree angle, moving your forearm towards the ceiling and inwards towards your body.",
+ "Rotate your arm upward as far as comfortably possible without lifting your elbow off the bench or your body moving off its position.",
+ "Pause at the top of the movement for a brief moment.",
+ "Slowly return the dumbbell to the starting position by rotating the forearm back to the bench while keeping the elbow angle constant.",
+ "Complete all the desired repetitions on one arm before switching to the other arm and repeating the steps."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": [
+ "Keep your elbow tucked into your side and pinned to the bench throughout the exercise."
+ ],
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_one_handed_shoulder_press_landmine",
+ "name": "One-Handed Shoulder Press - Landmine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "chest",
+ "front delts",
+ "side delts",
+ "triceps"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "abdominals",
+ "obliques",
+ "rotator cuff",
+ "traps"
+ ],
+ "instructions": [
+ "Position a barbell securely in a landmine attachment or securely in a corner to prevent it from sliding.",
+ "Load the desired weight onto the free end of the barbell.",
+ "Stand facing the barbell with your feet shoulder-width apart for stability.",
+ "Bend slightly to grab the barbell with one hand directly where the barbell is loaded.",
+ "Raise the barbell to your shoulder level, switching your grip so that your hand is under the barbell and your palm faces your chin over a bent and tucked elbow. This is your starting position.",
+ "Brace your core, and exhale as you press the barbell upward and slightly forward by extending your arm.",
+ "Keep your body straight and avoid rotating your hips or shoulders during the press.",
+ "Inhale as you slowly return the barbell to the starting position at your shoulder.",
+ "Complete all reps on one side before switching hands to work the opposite side."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_pause_squat_barbell",
+ "name": "Pause Squat - Barbell",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "lower back",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves"
+ ],
+ "instructions": [
+ "Start with your feet shoulder-width apart, your toes pointing slightly outward, and the barbell on your shoulders.",
+ "Lower your body into a squat position, keeping your back straight and your knees tracking with your toes.",
+ "Pause at the bottom of the squat for 2-3 seconds.",
+ "Slowly rise back up to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_pull_apart_band",
+ "name": "Pull-Apart - Band",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Band",
+ "primaryMuscles": [
+ "rotator cuff",
+ "rear delts"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [
+ "rotator cuff"
+ ],
+ "instructions": [
+ "Stand with feet shoulder-width apart and hold a resistance band with both hands.",
+ "Extend your arms straight out in front of you, keeping your palms facing down.",
+ "Begin pulling the band apart by squeezing your shoulder blades together.",
+ "Continue pulling until your hands are at shoulder height and the band is stretched tight.",
+ "Hold for a moment, then slowly release the tension and return to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_pullover_barbell",
+ "name": "Pullover - Barbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "chest",
+ "lats",
+ "triceps"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "rotator cuff"
+ ],
+ "instructions": [
+ "Lie on a bench with your head and shoulders supported, and your feet flat on the floor.",
+ "Hold a barbell with a pronated grip (palms facing forward) slightly wider than shoulder-width, and press it up to arm's length over your chest. This is your starting position.",
+ "Keep a slight bend in your elbows and lock your arms in this slightly bent position throughout the entire movement.",
+ "Inhale and slowly lower the barbell in an arc behind your head while keeping your arms straight, moving primarily at the shoulder joints.",
+ "Lower the barbell until your arms are parallel to the floor or until you feel a stretch in your chest or lats, whichever comes first.",
+ "Exhale as you reverse the motion, bringing the barbell back over your chest in the same arc motion.",
+ "Repeat for the desired number of reps."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_pullover_dumbbell",
+ "name": "Pullover - Dumbbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "chest",
+ "lats",
+ "triceps"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "rotator cuff"
+ ],
+ "instructions": [
+ "Lie on a bench with your head and shoulders supported, and your feet flat on the floor.",
+ "Hold a dumbbell with both hands, palms pressing against the underside of one of the sides of the dumbbell. Push the dumbbell towards the sky above your chest. This is your starting position.",
+ "Keep a slight bend in your elbows and lock your arms in this slightly bent position throughout the entire movement.",
+ "Inhale and slowly lower the dumbbell in an arc behind your head while keeping your arms straight, moving primarily at the shoulder joints.",
+ "Lower the dumbbell until your arms are parallel to the floor or until you feel a stretch in your chest or lats, whichever comes first.",
+ "Exhale as you reverse the motion, bringing the dumbbell back over your chest in the same arc motion.",
+ "Repeat for the desired number of reps."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_rear_delt_row_barbell",
+ "name": "Rear Delt Row - Barbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "rear delts",
+ "traps"
+ ],
+ "primaryMuscle": "rear delts",
+ "secondaryMuscles": [
+ "forearms",
+ "rotator cuff",
+ "side delts",
+ "lats"
+ ],
+ "instructions": [
+ "Stand with your feet shoulder-width apart and your knees slightly bent.",
+ "Hold a barbell with an overhand grip, hands shoulder-width apart.",
+ "Lean forward at the hips, keeping your back straight and your abs engaged.",
+ "Bring the barbell up towards your upper chest, keeping your elbows wide and out to the sides.",
+ "Squeeze your shoulder blades together at the top of the movement.",
+ "Lower the barbell back down to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_rear_delt_row_cable",
+ "name": "Rear Delt Row - Cable",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "rear delts",
+ "traps"
+ ],
+ "primaryMuscle": "rear delts",
+ "secondaryMuscles": [
+ "forearms",
+ "rotator cuff",
+ "side delts",
+ "lats"
+ ],
+ "instructions": [
+ "Attach a straight bar to a cable machine, preferably with a bench and foot rests.",
+ "Sit facing the cable machine with your feet shoulder-width apart and your knees slightly bent.",
+ "Grasp the bar with an overhand grip, with your hands slightly more than shoulder-width apart.",
+ "Lean forward slightly, keeping your back straight and your core engaged.",
+ "Pull the bar towards your upper chest, keeping your elbows wide and out to the sides.",
+ "Squeeze your shoulder blades together at the top of the movement.",
+ "Slowly release the bar back to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_rear_delt_row_dumbbell",
+ "name": "Rear Delt Row - Dumbbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rear delts",
+ "traps"
+ ],
+ "primaryMuscle": "rear delts",
+ "secondaryMuscles": [
+ "forearms",
+ "rotator cuff",
+ "side delts",
+ "lats"
+ ],
+ "instructions": [
+ "Stand up straight holding a dumbbell in each hand with an overhand grip, palms facing your thighs.",
+ "Hinge forward at the hips with a slight bend in the knees, keeping your back straight and nearly parallel to the floor.",
+ "Let the dumbbells hang directly in front of you with your arms fully extended. This is the starting position.",
+ "Keep your eyes looking slightly ahead to maintain neck alignment with your spine.",
+ "Exhale as you pull the dumbbells towards your upper chest, keeping your elbows flared out. Imagine you are squeezing your shoulder blades together.",
+ "Hold the contraction for a second when the dumbbells reach the peak position when your upper arm is just beyond horizontal.",
+ "Inhale as you slowly lower the dumbbells back to the starting position in a controlled manner.",
+ "Repeat the movement for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_row_t_bar",
+ "name": "Row - T-Bar",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "lats",
+ "rear delts",
+ "traps"
+ ],
+ "primaryMuscle": "lats",
+ "secondaryMuscles": [
+ "biceps",
+ "forearms",
+ "lower back",
+ "rotator cuff"
+ ],
+ "instructions": [
+ "Load the desired weight onto the T-Bar machine.",
+ "Lie down on the T-Bar machine with your feet securely planted.",
+ "Grasp the handles of the T-Bar with an overhand grip.",
+ "Pull the T-Bar towards your chest, keeping your elbows close to your body.",
+ "Pause briefly at the top of the movement, squeezing your shoulder blades together.",
+ "Slowly lower the T-Bar back to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_seated_shoulder_press_smith_machine",
+ "name": "Seated Shoulder Press - Smith Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "front delts"
+ ],
+ "primaryMuscle": "front delts",
+ "secondaryMuscles": [
+ "side delts",
+ "triceps"
+ ],
+ "instructions": [
+ "Sit on a back-supporting seat under a Smith Machine with your back straight and feet flat on the floor.",
+ "Adjust the height of the barbell on the Smith Machine so that it is at shoulder level.",
+ "Grasp the barbell with an overhand grip, slightly wider than shoulder-width apart.",
+ "Engage your core and press the barbell upward until your arms are fully extended, but not locked.",
+ "Pause for a moment at the top of the movement, then slowly lower the barbell back down to shoulder level.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_shrug_trap_bar",
+ "name": "Shrug - Trap Bar",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "traps"
+ ],
+ "primaryMuscle": "traps",
+ "secondaryMuscles": [
+ "forearms"
+ ],
+ "instructions": [
+ "Stand inside a trap bar with your feet shoulder-width apart.",
+ "Grasp the handles of the trap bar with an overhand grip.",
+ "Keep your back straight and your core engaged.",
+ "Exhale and lift your shoulders up towards your ears, squeezing your trapezius muscles.",
+ "Hold the shrug position for a second.",
+ "Inhale and slowly lower your shoulders back down to the starting position.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_single_arm_half_kneeling_high_row_cable",
+ "name": "Single Arm Half Kneeling High Row - Cable",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Cable",
+ "primaryMuscles": [
+ "lats"
+ ],
+ "primaryMuscle": "lats",
+ "secondaryMuscles": [
+ "obliques",
+ "rotator cuff",
+ "rear delts",
+ "traps"
+ ],
+ "instructions": [
+ "Position a cable machine at the top setting and attach a single handle.",
+ "Assume a half-kneeling position with your right knee on the ground and left foot forward.",
+ "Grasp the handle with your right hand while keeping the arm extended.",
+ "Engage your core and keep your torso upright.",
+ "Pull the handle down and backwards by engaging your lat, keeping the elbow close to your body.",
+ "Pull until your hand reaches chest level, then pause briefly.",
+ "Slowly extend your arm back to the start position, controlling the movement.",
+ "Complete the desired number of repetitions and switch to the other side."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_single_leg_romanian_deadlift_landmine",
+ "name": "Single-Leg Romanian Deadlift - Landmine",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "hamstrings"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "abdominals",
+ "calves",
+ "lower back",
+ "obliques",
+ "quadriceps"
+ ],
+ "instructions": [
+ "Stand with your right side facing the end of a barbell secured in a landmine attachment, holding the bar with your right hand using a pronated (overhand) grip. The end of the barbell should be at arms-length in front of your quad. This is your starting position.",
+ "Shift your weight onto your left leg, keeping a slight bend in the knee of your standing leg.",
+ "Hinge at your hips and lean forward, extending your right leg straight back for balance.",
+ "Lower the barbell toward the floor while keeping your back straight and core engaged, ensuring your hips remain square.",
+ "Continue lowering until you feel a stretch in the hamstring of the standing leg or your upper body is nearly parallel to the floor.",
+ "Drive through the heel of the standing leg to return to the starting position, engaging your glutes as you stand.",
+ "Keep your gaze forward and chest lifted throughout the movement to maintain a flat back.",
+ "Repeat for the desired number of reps before switching to the opposite leg."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_squat_belt",
+ "name": "Squat - Belt",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Other",
+ "primaryMuscles": [
+ "glutes",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves"
+ ],
+ "instructions": [
+ "Add your desired weight to the machine.",
+ "Attach a belt or harness around your waist.",
+ "Attach a cable or chain to the belt or harness.",
+ "Stand on a platform or box with feet shoulder-width apart.",
+ "Hold onto a stable object for balance.",
+ "Squat by bending the knees and hips while keeping the back straight.",
+ "Pause at the bottom of the squat and then push up through the legs to return to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_squat_landmine",
+ "name": "Squat - Landmine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "glutes",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves"
+ ],
+ "instructions": [
+ "Start by placing a barbell into a landmine attachment or securely anchor it into a corner.",
+ "Stand facing the barbell with your feet shoulder-width apart and your toes pointing slightly outward.",
+ "Grab the end of the barbell with both hands and lift it up to your chest.",
+ "Lower your hips down and back, keeping your chest up and your back straight.",
+ "Bend your knees and lower your body until your thighs are parallel to the ground.",
+ "Push through your heels and stand back up to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_squat_smith_machine",
+ "name": "Squat - Smith Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "glutes",
+ "lower back",
+ "quadriceps",
+ "adductors"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "calves"
+ ],
+ "instructions": [
+ "Adjust the bar height to your desired position.",
+ "Load the bar with an appropriate weight.",
+ "Stand facing the bar with your feet shoulder-width apart.",
+ "Step forward and position the bar on your shoulders, resting on the back of your neck.",
+ "Grasp the bar with both hands, keeping your elbows pointed down and your chest up.",
+ "Lower your body by bending at the knees and hips, keeping your back straight and your head up.",
+ "Lower until your thighs are parallel to the ground, then push back up to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_stability_ball_pullover_dumbbell",
+ "name": "Stability Ball Pullover - Dumbbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "chest",
+ "lats",
+ "triceps"
+ ],
+ "primaryMuscle": "chest",
+ "secondaryMuscles": [
+ "abdominals",
+ "rotator cuff"
+ ],
+ "instructions": [
+ "Select an appropriate weight dumbbell and a stability ball.",
+ "Sit on the stability ball and place the dumbbell on your lap.",
+ "Roll down the ball until your upper back and shoulders are supported by it, keeping your hips lifted, your body in a straight line, and your feet flat on the ground.",
+ "Hold the dumbbell over your chest with both hands, gripping one end of the dumbbell while the other end points towards your chest. This is your starting position.",
+ "Slowly lower the dumbbell in an arc behind your head, keeping your arms mostly straight, but slightly bent, throughout.",
+ "Stretch your arms back as far as comfortably possible while maintaining control of the weight.",
+ "Bring the dumbbell back up over your chest along the same arc.",
+ "Repeat for the desired number of repetitions."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_standing_external_shoulder_rotation_dumbbell",
+ "name": "Standing External Shoulder Rotation - Dumbbell",
+ "force": "static",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Dumbbell",
+ "primaryMuscles": [
+ "rotator cuff"
+ ],
+ "primaryMuscle": "rotator cuff",
+ "secondaryMuscles": [
+ "rotator cuff",
+ "rear delts",
+ "front delts",
+ "side delts"
+ ],
+ "instructions": [
+ "Stand with feet shoulder-width apart, holding a dumbbell in one hand.",
+ "Bend the arm at the shoulder to raise your upper arm, making it parallel to the floor and perpendicular to your body.",
+ "Bend your forearm at the elbow to a 90-degree angle so that your forearm is parallel to the floor, creating an 'L' shape with your arm. This is the starting position.",
+ "Keeping your upper arm stationary, rotate your shoulder, lifting the dumbbell towards the ceiling as far as possible without discomfort.",
+ "Pause briefly at the top of the rotation, then slowly return the dumbbell to the starting position.",
+ "Complete the desired number of repetitions, then switch arms and repeat the exercise."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_standing_glute_kickback_machine",
+ "name": "Standing Glute Kickback - Machine",
+ "force": "push",
+ "level": "intermediate",
+ "mechanic": "isolation",
+ "equipment": "Machine",
+ "primaryMuscles": [
+ "glutes"
+ ],
+ "primaryMuscle": "glutes",
+ "secondaryMuscles": [
+ "hamstrings",
+ "adductors"
+ ],
+ "instructions": [
+ "Adjust the machine to the appropriate height for your body.",
+ "Stand facing the machine with your feet shoulder-width apart and your hands holding onto the handles.",
+ "Engage your glutes and lift one leg straight back behind you, keeping it in line with your body.",
+ "Pause at the top of the movement and squeeze your glutes.",
+ "Lower your leg back down to the starting position and repeat on the other side.",
+ "Complete the desired number of repetitions on each leg."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ },
+ {
+ "id": "longhaul_upright_row_barbell",
+ "name": "Upright Row - Barbell",
+ "force": "pull",
+ "level": "intermediate",
+ "mechanic": "compound",
+ "equipment": "Barbell",
+ "primaryMuscles": [
+ "side delts"
+ ],
+ "primaryMuscle": "side delts",
+ "secondaryMuscles": [
+ "biceps",
+ "front delts",
+ "traps"
+ ],
+ "instructions": [
+ "Stand with your feet shoulder-width apart and your knees slightly bent.",
+ "Grasp the barbell with an overhand grip, hands narrower than shoulder-width apart.",
+ "Hold the barbell in front of your thighs with your arms extended.",
+ "Exhale and lift the barbell straight up towards your chin, keeping it close to your body.",
+ "Pause for a moment at the top of the movement, then inhale and slowly lower the barbell back down to the starting position.",
+ "Repeat."
+ ],
+ "category": "strength",
+ "images": [],
+ "isCustom": false,
+ "coachingCues": null,
+ "source": "longhaul-fitness/exercises"
+ }
+]
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/exercise_youtube_by_normalized_name.json b/app/src/main/assets/ironlog/exercise_youtube_by_normalized_name.json
new file mode 100644
index 0000000..8cebd37
--- /dev/null
+++ b/app/src/main/assets/ironlog/exercise_youtube_by_normalized_name.json
@@ -0,0 +1,5240 @@
+{
+ "34situp": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=3%2F4+Sit-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=3%2F4+Sit-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "3/4 Sit-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "abcrunchmachine": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ab+Crunch+Machine+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ab+Crunch+Machine+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ab Crunch Machine Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "abroller": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ab+Roller+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ab+Roller+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ab Roller Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "advancedkettlebellwindmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Advanced+Kettlebell+Windmill+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Advanced+Kettlebell+Windmill+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Advanced Kettlebell Windmill Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "airbike": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Air+Bike+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Air+Bike+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Air Bike Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "alternateheeltouchers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternate+Heel+Touchers+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternate+Heel+Touchers+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternate Heel Touchers Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "barbellabrollout": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Ab+Rollout+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Ab+Rollout+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Ab Rollout Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "barbellabrolloutonknees": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Ab+Rollout+-+On+Knees+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Ab+Rollout+-+On+Knees+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Ab Rollout - On Knees Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "barbellrolloutfrombench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Rollout+from+Bench+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Rollout+from+Bench+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Rollout from Bench Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "barbellsidebend": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Side+Bend+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Side+Bend+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Side Bend Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "bentpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Press+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Press+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Press Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "bentkneehipraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent-Knee+Hip+Raise+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent-Knee+Hip+Raise+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent-Knee Hip Raise Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "bosuballcablecrunchwithsidebends": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bosu+Ball+Cable+Crunch+With+Side+Bends+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bosu+Ball+Cable+Crunch+With+Side+Bends+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bosu Ball Cable Crunch With Side Bends Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "bottomsup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bottoms+Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bottoms+Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bottoms Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "buttups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Butt-Ups+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Butt-Ups+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Butt-Ups Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cablecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cablejudoflip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Judo+Flip+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Judo+Flip+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Judo Flip Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cablereversecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Reverse+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Reverse+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Reverse Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cablerussiantwists": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Russian+Twists+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Russian+Twists+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Russian Twists Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cableseatedcrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Seated+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Seated+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Seated Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "cocoons": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cocoons+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cocoons+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cocoons Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "crossbodycrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cross-Body+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cross-Body+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cross-Body Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "crunchhandsoverhead": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Crunch+-+Hands+Overhead+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Crunch+-+Hands+Overhead+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Crunch - Hands Overhead Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "crunchlegsonexerciseball": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Crunch+-+Legs+On+Exercise+Ball+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Crunch+-+Legs+On+Exercise+Ball+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Crunch - Legs On Exercise Ball Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "crunches": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Crunches+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Crunches+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Crunches Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "deadbug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dead+Bug+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dead+Bug+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dead Bug Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "declinecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "declineobliquecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Oblique+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Oblique+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Oblique Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "declinereversecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Reverse+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Reverse+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Reverse Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "doublekettlebellwindmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Windmill+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Windmill+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Kettlebell Windmill Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "dumbbellsidebend": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Side+Bend+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Side+Bend+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Side Bend Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "elbowtoknee": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elbow+to+Knee+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elbow+to+Knee+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elbow to Knee Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "exerciseballcrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Exercise+Ball+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Exercise+Ball+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Exercise Ball Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "exerciseballpullin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Exercise+Ball+Pull-In+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Exercise+Ball+Pull-In+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Exercise Ball Pull-In Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "flatbenchlegpullin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Flat+Bench+Leg+Pull-In+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Flat+Bench+Leg+Pull-In+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Flat Bench Leg Pull-In Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "flatbenchlyinglegraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Flat+Bench+Lying+Leg+Raise+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Flat+Bench+Lying+Leg+Raise+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Flat Bench Lying Leg Raise Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "frogsitups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Frog+Sit-Ups+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Frog+Sit-Ups+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Frog Sit-Ups Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "gorillachincrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Gorilla+Chin%2FCrunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Gorilla+Chin%2FCrunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Gorilla Chin/Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "hanginglegraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hanging+Leg+Raise+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hanging+Leg+Raise+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hanging Leg Raise Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "hangingpike": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hanging+Pike+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hanging+Pike+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hanging Pike Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "jackknifesitup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Jackknife+Sit-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Jackknife+Sit-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Jackknife Sit-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "jandasitup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Janda+Sit-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Janda+Sit-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Janda Sit-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "kettlebellfigure8": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Figure+8+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Figure+8+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Figure 8 Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "kettlebellpassbetweenthelegs": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Pass+Between+The+Legs+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Pass+Between+The+Legs+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Pass Between The Legs Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "kettlebellwindmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Windmill+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Windmill+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Windmill Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "kneehipraiseonparallelbars": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Knee%2FHip+Raise+On+Parallel+Bars+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Knee%2FHip+Raise+On+Parallel+Bars+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Knee/Hip Raise On Parallel Bars Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "kneelingcablecrunchwithalternatingobliquetwists": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Cable+Crunch+With+Alternating+Oblique+Twists+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Cable+Crunch+With+Alternating+Oblique+Twists+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Cable Crunch With Alternating Oblique Twists Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "landmine180s": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Landmine+180%27s+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Landmine+180%27s+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Landmine 180's Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "legpullin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg+Pull-In+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg+Pull-In+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg Pull-In Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "lowerbackcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lower+Back+Curl+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lower+Back+Curl+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lower Back Curl Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "medicineballfulltwist": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Full+Twist+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Full+Twist+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Medicine Ball Full Twist Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "obliquecrunches": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Oblique+Crunches+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Oblique+Crunches+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Oblique Crunches Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "obliquecrunchesonthefloor": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Oblique+Crunches+-+On+The+Floor+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Oblique+Crunches+-+On+The+Floor+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Oblique Crunches - On The Floor Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "onearmhighpulleycablesidebends": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+High-Pulley+Cable+Side+Bends+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+High-Pulley+Cable+Side+Bends+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm High-Pulley Cable Side Bends Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "onearmmedicineballslam": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Medicine+Ball+Slam+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Medicine+Ball+Slam+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Medicine Ball Slam Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "otisup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Otis-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Otis-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Otis-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "overheadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Stretch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Stretch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Stretch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "pallofpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pallof+Press+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pallof+Press+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pallof Press Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "pallofpresswithrotation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pallof+Press+With+Rotation+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pallof+Press+With+Rotation+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pallof Press With Rotation Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "plank": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plank+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plank+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plank Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "platetwist": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plate+Twist+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plate+Twist+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plate Twist Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "presssitup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Press+Sit-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Press+Sit-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Press Sit-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "reversecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "ropecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rope+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rope+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rope Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "russiantwist": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Russian+Twist+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Russian+Twist+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Russian Twist Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "scissorkick": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Scissor+Kick+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Scissor+Kick+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Scissor Kick Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "seatedbarbelltwist": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Barbell+Twist+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Barbell+Twist+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Barbell Twist Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "seatedflatbenchlegpullin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Flat+Bench+Leg+Pull-In+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Flat+Bench+Leg+Pull-In+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Flat Bench Leg Pull-In Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "seatedlegtucks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Leg+Tucks+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Leg+Tucks+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Leg Tucks Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "seatedoverheadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Overhead+Stretch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Overhead+Stretch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Overhead Stretch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "sidebridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Bridge+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Bridge+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Bridge Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "sidejackknife": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Jackknife+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Jackknife+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Jackknife Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "situp": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sit-Up+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sit-Up+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sit-Up Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "sledgehammerswings": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sledgehammer+Swings+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sledgehammer+Swings+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sledgehammer Swings Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "smithmachinehipraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Hip+Raise+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Hip+Raise+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Hip Raise Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "spellcaster": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Spell+Caster+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Spell+Caster+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Spell Caster Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "spidercrawl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Spider+Crawl+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Spider+Crawl+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Spider Crawl Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "standingcablelift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Cable+Lift+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Cable+Lift+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Cable Lift Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "standingcablewoodchop": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Cable+Wood+Chop+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Cable+Wood+Chop+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Cable Wood Chop Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "standinglateralstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Lateral+Stretch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Lateral+Stretch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Lateral Stretch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "standingropecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Rope+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Rope+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Rope Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "stomachvacuum": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stomach+Vacuum+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stomach+Vacuum+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stomach Vacuum Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "supineonearmoverheadthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Supine+One-Arm+Overhead+Throw+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Supine+One-Arm+Overhead+Throw+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Supine One-Arm Overhead Throw Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "supinetwoarmoverheadthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Supine+Two-Arm+Overhead+Throw+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Supine+Two-Arm+Overhead+Throw+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Supine Two-Arm Overhead Throw Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "suspendedfallout": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Suspended+Fallout+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Suspended+Fallout+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Suspended Fallout Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "suspendedreversecrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Suspended+Reverse+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Suspended+Reverse+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Suspended Reverse Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "toetouchers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Toe+Touchers+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Toe+Touchers+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Toe Touchers Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "torsorotation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Torso+Rotation+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Torso+Rotation+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Torso Rotation Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "tuckcrunch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Tuck+Crunch+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Tuck+Crunch+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Tuck Crunch Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "weightedballsidebend": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Ball+Side+Bend+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Ball+Side+Bend+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Ball Side Bend Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "weightedcrunches": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Crunches+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Crunches+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Crunches Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "weightedsitupswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Sit-Ups+-+With+Bands+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Sit-Ups+-+With+Bands+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Sit-Ups - With Bands Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "windsprints": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wind+Sprints+Abdominals+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wind+Sprints+Abdominals+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wind Sprints Abdominals exercise tutorial",
+ "category": "Abdominals"
+ },
+ "hipcirclesprone": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hip+Circles+%28prone%29+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hip+Circles+%28prone%29+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hip Circles (prone) Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "itbandandglutestretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=IT+Band+and+Glute+Stretch+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=IT+Band+and+Glute+Stretch+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "IT Band and Glute Stretch Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "iliotibialtractsmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Iliotibial+Tract-SMR+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Iliotibial+Tract-SMR+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Iliotibial Tract-SMR Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "lyingcrossover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Crossover+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Crossover+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Crossover Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "monsterwalk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Monster+Walk+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Monster+Walk+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Monster Walk Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "standinghipcircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Hip+Circles+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Hip+Circles+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Hip Circles Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "thighabductor": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Thigh+Abductor+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Thigh+Abductor+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Thigh Abductor Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "windmills": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Windmills+Abductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Windmills+Abductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Windmills Abductors exercise tutorial",
+ "category": "Abductors"
+ },
+ "adductor": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Adductor+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Adductor+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Adductor Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "adductorgroin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Adductor%2FGroin+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Adductor%2FGroin+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Adductor/Groin Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "bandhipadductions": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Hip+Adductions+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Hip+Adductions+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Hip Adductions Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "cariocaquickstep": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Carioca+Quick+Step+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Carioca+Quick+Step+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Carioca Quick Step Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "groinandbackstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Groin+and+Back+Stretch+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Groin+and+Back+Stretch+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Groin and Back Stretch Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "groiners": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Groiners+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Groiners+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Groiners Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "lateralbound": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lateral+Bound+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lateral+Bound+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lateral Bound Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "lateralboxjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lateral+Box+Jump+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lateral+Box+Jump+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lateral Box Jump Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "lateralconehops": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lateral+Cone+Hops+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lateral+Cone+Hops+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lateral Cone Hops Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "lyingbentleggroin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Bent+Leg+Groin+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Bent+Leg+Groin+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Bent Leg Groin Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "sidelegraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Leg+Raises+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Leg+Raises+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Leg Raises Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "sidelyinggroinstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Lying+Groin+Stretch+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Lying+Groin+Stretch+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Lying Groin Stretch Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "thighadductor": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Thigh+Adductor+Adductors+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Thigh+Adductor+Adductors+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Thigh Adductor Adductors exercise tutorial",
+ "category": "Adductors"
+ },
+ "alternatehammercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternate+Hammer+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternate+Hammer+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternate Hammer Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "alternateinclinedumbbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternate+Incline+Dumbbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternate+Incline+Dumbbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternate Incline Dumbbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "barbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "barbellcurlslyingagainstanincline": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Curls+Lying+Against+An+Incline+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Curls+Lying+Against+An+Incline+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Curls Lying Against An Incline Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "brachialissmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Brachialis-SMR+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Brachialis-SMR+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Brachialis-SMR Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "cablehammercurlsropeattachment": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Hammer+Curls+-+Rope+Attachment+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Hammer+Curls+-+Rope+Attachment+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Hammer Curls - Rope Attachment Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "cablepreachercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Preacher+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Preacher+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Preacher Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "closegripezbarcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ+Bar+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ+Bar+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip EZ Bar Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "closegripezbarcurlwithband": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ-Bar+Curl+with+Band+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ-Bar+Curl+with+Band+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip EZ-Bar Curl with Band Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "closegripstandingbarbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+Standing+Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+Standing+Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip Standing Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "concentrationcurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Concentration+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Concentration+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Concentration Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "crossbodyhammercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cross+Body+Hammer+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cross+Body+Hammer+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cross Body Hammer Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "dragcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Drag+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Drag+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Drag Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "dumbbellalternatebicepcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Alternate+Bicep+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Alternate+Bicep+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Alternate Bicep Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "dumbbellbicepcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Bicep+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Bicep+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Bicep Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "dumbbellproneinclinecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Prone+Incline+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Prone+Incline+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Prone Incline Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "ezbarcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=EZ-Bar+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=EZ-Bar+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "EZ-Bar Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "flexorinclinedumbbellcurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Flexor+Incline+Dumbbell+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Flexor+Incline+Dumbbell+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Flexor Incline Dumbbell Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "hammercurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hammer+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hammer+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hammer Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "highcablecurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=High+Cable+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=High+Cable+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "High Cable Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "inclinedumbbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Dumbbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "inclinehammercurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Hammer+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Hammer+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Hammer Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "inclineinnerbicepscurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Inner+Biceps+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Inner+Biceps+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Inner Biceps Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "lyingcablecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Cable+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Cable+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Cable Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "lyingclosegripbarcurlonhighpulley": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Bar+Curl+On+High+Pulley+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Bar+Curl+On+High+Pulley+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Close-Grip Bar Curl On High Pulley Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "lyinghighbenchbarbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+High+Bench+Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+High+Bench+Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying High Bench Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "lyingsupinedumbbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Supine+Dumbbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Supine+Dumbbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Supine Dumbbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "machinebicepcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Machine+Bicep+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Machine+Bicep+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Machine Bicep Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "machinepreachercurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Machine+Preacher+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Machine+Preacher+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Machine Preacher Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "onearmdumbbellpreachercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Dumbbell+Preacher+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Dumbbell+Preacher+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Dumbbell Preacher Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "overheadcablecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Cable+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Cable+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Cable Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "preachercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Preacher+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Preacher+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Preacher Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "preacherhammerdumbbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Preacher+Hammer+Dumbbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Preacher+Hammer+Dumbbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Preacher Hammer Dumbbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "reversebarbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "reversebarbellpreachercurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Barbell+Preacher+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Barbell+Preacher+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Barbell Preacher Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "reversecablecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Cable+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Cable+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Cable Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "reverseplatecurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Plate+Curls+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Plate+Curls+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Plate Curls Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "seatedbiceps": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Biceps+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Biceps+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Biceps Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "seatedclosegripconcentrationbarbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Close-Grip+Concentration+Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Close-Grip+Concentration+Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Close-Grip Concentration Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "seateddumbbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Dumbbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "seateddumbbellinnerbicepscurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Inner+Biceps+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Inner+Biceps+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Dumbbell Inner Biceps Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "spidercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Spider+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Spider+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Spider Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingbicepscablecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Biceps+Cable+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Biceps+Cable+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Biceps Cable Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingbicepsstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Biceps+Stretch+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Biceps+Stretch+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Biceps Stretch Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingconcentrationcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Concentration+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Concentration+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Concentration Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingdumbbellreversecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Reverse+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Reverse+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Reverse Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standinginnerbicepscurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Inner-Biceps+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Inner-Biceps+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Inner-Biceps Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingonearmcablecurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Cable+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Cable+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing One-Arm Cable Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "standingonearmdumbbellcurloverinclinebench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Dumbbell+Curl+Over+Incline+Bench+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Dumbbell+Curl+Over+Incline+Bench+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing One-Arm Dumbbell Curl Over Incline Bench Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "twoarmdumbbellpreachercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Two-Arm+Dumbbell+Preacher+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Two-Arm+Dumbbell+Preacher+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Two-Arm Dumbbell Preacher Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "widegripstandingbarbellcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Standing+Barbell+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Standing+Barbell+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Standing Barbell Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "zottmancurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Zottman+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Zottman+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Zottman Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "zottmanpreachercurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Zottman+Preacher+Curl+Biceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Zottman+Preacher+Curl+Biceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Zottman Preacher Curl Biceps exercise tutorial",
+ "category": "Biceps"
+ },
+ "anklecircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ankle+Circles+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ankle+Circles+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ankle Circles Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "anteriortibialissmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Anterior+Tibialis-SMR+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Anterior+Tibialis-SMR+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Anterior Tibialis-SMR Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "balanceboard": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Balance+Board+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Balance+Board+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Balance Board Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "barbellseatedcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Seated+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Seated+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Seated Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Press+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Press+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Press Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfpressonthelegpressmachine": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Press+On+The+Leg+Press+Machine+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Press+On+The+Leg+Press+Machine+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Press On The Leg Press Machine Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfraiseonadumbbell": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Raise+On+A+Dumbbell+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Raise+On+A+Dumbbell+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Raise On A Dumbbell Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfraiseswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Raises+-+With+Bands+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Raises+-+With+Bands+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Raises - With Bands Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfstretchelbowsagainstwall": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Stretch+Elbows+Against+Wall+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Stretch+Elbows+Against+Wall+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Stretch Elbows Against Wall Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calfstretchhandsagainstwall": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf+Stretch+Hands+Against+Wall+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf+Stretch+Hands+Against+Wall+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf Stretch Hands Against Wall Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "calvessmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calves-SMR+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calves-SMR+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calves-SMR Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "donkeycalfraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Donkey+Calf+Raises+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Donkey+Calf+Raises+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Donkey Calf Raises Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "dumbbellseatedonelegcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Seated+One-Leg+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Seated+One-Leg+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Seated One-Leg Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "footsmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Foot-SMR+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Foot-SMR+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Foot-SMR Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "kneecircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Knee+Circles+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Knee+Circles+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Knee Circles Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "peronealsstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Peroneals+Stretch+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Peroneals+Stretch+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Peroneals Stretch Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "peronealssmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Peroneals-SMR+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Peroneals-SMR+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Peroneals-SMR Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "posteriortibialisstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Posterior+Tibialis+Stretch+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Posterior+Tibialis+Stretch+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Posterior Tibialis Stretch Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "rockingstandingcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rocking+Standing+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rocking+Standing+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rocking Standing Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "seatedcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "seatedcalfstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Calf+Stretch+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Calf+Stretch+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Calf Stretch Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "smithmachinecalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "smithmachinereversecalfraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Reverse+Calf+Raises+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Reverse+Calf+Raises+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Reverse Calf Raises Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "standingbarbellcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Barbell+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Barbell+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Barbell Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "standingcalfraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Calf+Raises+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Calf+Raises+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Calf Raises Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "standingdumbbellcalfraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Calf+Raise+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Calf+Raise+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Calf Raise Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "standinggastrocnemiuscalfstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Gastrocnemius+Calf+Stretch+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Gastrocnemius+Calf+Stretch+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Gastrocnemius Calf Stretch Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "standingsoleusandachillesstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Soleus+And+Achilles+Stretch+Calves+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Soleus+And+Achilles+Stretch+Calves+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Soleus And Achilles Stretch Calves exercise tutorial",
+ "category": "Calves"
+ },
+ "alternatingfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Floor+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Floor+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Floor Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "aroundtheworlds": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Around+The+Worlds+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Around+The+Worlds+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Around The Worlds Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "barbellbenchpressmediumgrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Bench+Press+-+Medium+Grip+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Bench+Press+-+Medium+Grip+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Bench Press - Medium Grip Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "barbellguillotinebenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Guillotine+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Guillotine+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Guillotine Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "barbellinclinebenchpressmediumgrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Incline+Bench+Press+-+Medium+Grip+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Incline+Bench+Press+-+Medium+Grip+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Incline Bench Press - Medium Grip Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "behindheadcheststretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Behind+Head+Chest+Stretch+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Behind+Head+Chest+Stretch+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Behind Head Chest Stretch Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "benchpresswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Press+-+With+Bands+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Press+-+With+Bands+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Press - With Bands Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "bentarmdumbbellpullover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent-Arm+Dumbbell+Pullover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent-Arm+Dumbbell+Pullover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent-Arm Dumbbell Pullover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "bodyweightflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bodyweight+Flyes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bodyweight+Flyes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bodyweight Flyes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "butterfly": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Butterfly+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Butterfly+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Butterfly Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "cablechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "cablecrossover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Crossover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Crossover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Crossover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "cableironcross": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Iron+Cross+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Iron+Cross+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Iron Cross Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chainpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chain+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chain+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chain Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chestandfrontofshoulderstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+And+Front+Of+Shoulder+Stretch+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+And+Front+Of+Shoulder+Stretch+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest And Front Of Shoulder Stretch Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chestpushmultipleresponse": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+Push+%28multiple+response%29+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+Push+%28multiple+response%29+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest Push (multiple response) Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chestpushsingleresponse": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+Push+%28single+response%29+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+Push+%28single+response%29+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest Push (single response) Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chestpushfrom3pointstance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+Push+from+3+point+stance+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+Push+from+3+point+stance+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest Push from 3 point stance Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "chestpushwithrunrelease": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+Push+with+Run+Release+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+Push+with+Run+Release+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest Push with Run Release Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "cheststretchonstabilityball": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chest+Stretch+on+Stability+Ball+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chest+Stretch+on+Stability+Ball+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chest Stretch on Stability Ball Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "clockpushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clock+Push-Up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clock+Push-Up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clock Push-Up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "crossoverwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cross+Over+-+With+Bands+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cross+Over+-+With+Bands+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cross Over - With Bands Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "declinebarbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Barbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Barbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Barbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "declinedumbbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Dumbbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "declinedumbbellflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Flyes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Flyes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Dumbbell Flyes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "declinepushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Push-Up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Push-Up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Push-Up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "declinesmithpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Smith+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Smith+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Smith Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "dipschestversion": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dips+-+Chest+Version+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dips+-+Chest+Version+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dips - Chest Version Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "droppush": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Drop+Push+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Drop+Push+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Drop Push Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "dumbbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "dumbbellbenchpresswithneutralgrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Bench+Press+with+Neutral+Grip+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Bench+Press+with+Neutral+Grip+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Bench Press with Neutral Grip Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "dumbbellflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Flyes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Flyes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Flyes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "dynamiccheststretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dynamic+Chest+Stretch+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dynamic+Chest+Stretch+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dynamic Chest Stretch Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "elbowsback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elbows+Back+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elbows+Back+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elbows Back Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "extendedrangeonearmkettlebellfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Extended+Range+One-Arm+Kettlebell+Floor+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Extended+Range+One-Arm+Kettlebell+Floor+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Extended Range One-Arm Kettlebell Floor Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "flatbenchcableflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Flat+Bench+Cable+Flyes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Flat+Bench+Cable+Flyes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Flat Bench Cable Flyes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "forwarddragwithpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Forward+Drag+with+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Forward+Drag+with+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Forward Drag with Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "frontraiseandpullover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Raise+And+Pullover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Raise+And+Pullover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Raise And Pullover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "hammergripinclinedbbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hammer+Grip+Incline+DB+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hammer+Grip+Incline+DB+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hammer Grip Incline DB Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "heavybagthrust": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Heavy+Bag+Thrust+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Heavy+Bag+Thrust+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Heavy Bag Thrust Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinecablechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Cable+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Cable+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Cable Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinecableflye": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Cable+Flye+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Cable+Flye+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Cable Flye Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinedumbbellbenchwithpalmsfacingin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Bench+With+Palms+Facing+In+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Bench+With+Palms+Facing+In+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Dumbbell Bench With Palms Facing In Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinedumbbellflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Flyes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Flyes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Dumbbell Flyes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinedumbbellflyeswithatwist": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Flyes+-+With+A+Twist+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Flyes+-+With+A+Twist+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Dumbbell Flyes - With A Twist Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinedumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Dumbbell+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Dumbbell Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinepushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinepushupdepthjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Depth+Jump+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Depth+Jump+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Depth Jump Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinepushupmedium": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Medium+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Medium+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Medium Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinepushupreversegrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Reverse+Grip+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Reverse+Grip+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Reverse Grip Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "inclinepushupwide": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Wide+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Wide+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Wide Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "isometricchestsqueezes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Isometric+Chest+Squeezes+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Isometric+Chest+Squeezes+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Isometric Chest Squeezes Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "isometricwipers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Isometric+Wipers+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Isometric+Wipers+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Isometric Wipers Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "legoverfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg-Over+Floor+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg-Over+Floor+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg-Over Floor Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "leveragechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "leveragedeclinechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Decline+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Decline+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Decline Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "leverageinclinechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Incline+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Incline+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Incline Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "lowcablecrossover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Low+Cable+Crossover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Low+Cable+Crossover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Low Cable Crossover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "machinebenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Machine+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Machine+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Machine Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "medicineballchestpass": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Chest+Pass+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Chest+Pass+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Medicine Ball Chest Pass Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "neckpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Neck+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Neck+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Neck Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "onearmdumbbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Dumbbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Dumbbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Dumbbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "onearmflatbenchdumbbellflye": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Flat+Bench+Dumbbell+Flye+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Flat+Bench+Dumbbell+Flye+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Flat Bench Dumbbell Flye Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "onearmkettlebellfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Floor+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Floor+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Floor Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "plyokettlebellpushups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plyo+Kettlebell+Pushups+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plyo+Kettlebell+Pushups+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plyo Kettlebell Pushups Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "plyopushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plyo+Push-up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plyo+Push-up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plyo Push-up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushuptosideplank": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push+Up+to+Side+Plank+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push+Up+to+Side+Plank+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push Up to Side Plank Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushupwide": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push-Up+Wide+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push-Up+Wide+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push-Up Wide Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushupswithfeetelevated": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push-Ups+With+Feet+Elevated+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push-Ups+With+Feet+Elevated+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push-Ups With Feet Elevated Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushupswithfeetonanexerciseball": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push-Ups+With+Feet+On+An+Exercise+Ball+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push-Ups+With+Feet+On+An+Exercise+Ball+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push-Ups With Feet On An Exercise Ball Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pushups+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pushups+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pushups Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "pushupscloseandwidehandpositions": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pushups+%28Close+and+Wide+Hand+Positions%29+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pushups+%28Close+and+Wide+Hand+Positions%29+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pushups (Close and Wide Hand Positions) Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "singlearmcablecrossover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Arm+Cable+Crossover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Arm+Cable+Crossover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Arm Cable Crossover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "singlearmpushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Arm+Push-Up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Arm+Push-Up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Arm Push-Up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "smithmachinebenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "smithmachinedeclinepress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Decline+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Decline+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Decline Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "smithmachineinclinebenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Incline+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Incline+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Incline Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "standingcablechestpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Cable+Chest+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Cable+Chest+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Cable Chest Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "straightarmdumbbellpullover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Straight-Arm+Dumbbell+Pullover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Straight-Arm+Dumbbell+Pullover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Straight-Arm Dumbbell Pullover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "suspendedpushup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Suspended+Push-Up+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Suspended+Push-Up+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Suspended Push-Up Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "svendpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Svend+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Svend+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Svend Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "widegripbarbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Barbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Barbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Barbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "widegripdeclinebarbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Decline+Barbell+Bench+Press+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Decline+Barbell+Bench+Press+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Decline Barbell Bench Press Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "widegripdeclinebarbellpullover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Decline+Barbell+Pullover+Chest+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Decline+Barbell+Pullover+Chest+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Decline Barbell Pullover Chest exercise tutorial",
+ "category": "Chest"
+ },
+ "bottomsupcleanfromthehangposition": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bottoms-Up+Clean+From+The+Hang+Position+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bottoms-Up+Clean+From+The+Hang+Position+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bottoms-Up Clean From The Hang Position Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "cablewristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "dumbbelllyingpronation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Pronation+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Pronation+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Lying Pronation Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "dumbbelllyingsupination": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Supination+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Supination+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Lying Supination Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "farmerswalk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Farmer%27s+Walk+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Farmer%27s+Walk+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Farmer's Walk Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "fingercurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Finger+Curls+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Finger+Curls+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Finger Curls Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "kneelingforearmstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Forearm+Stretch+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Forearm+Stretch+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Forearm Stretch Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "palmsdowndumbbellwristcurloverabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Palms-Down+Dumbbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Palms-Down+Dumbbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Palms-Down Dumbbell Wrist Curl Over A Bench Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "palmsdownwristcurloverabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Palms-Down+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Palms-Down+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Palms-Down Wrist Curl Over A Bench Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "palmsupbarbellwristcurloverabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Palms-Up+Barbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Palms-Up+Barbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Palms-Up Barbell Wrist Curl Over A Bench Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "palmsupdumbbellwristcurloverabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Palms-Up+Dumbbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Palms-Up+Dumbbell+Wrist+Curl+Over+A+Bench+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Palms-Up Dumbbell Wrist Curl Over A Bench Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "platepinch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plate+Pinch+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plate+Pinch+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plate Pinch Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "rickshawcarry": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rickshaw+Carry+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rickshaw+Carry+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rickshaw Carry Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seateddumbbellpalmsdownwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Palms-Down+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Palms-Down+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Dumbbell Palms-Down Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seateddumbbellpalmsupwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Palms-Up+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Palms-Up+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Dumbbell Palms-Up Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seatedonearmdumbbellpalmsdownwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+One-Arm+Dumbbell+Palms-Down+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+One-Arm+Dumbbell+Palms-Down+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated One-Arm Dumbbell Palms-Down Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seatedonearmdumbbellpalmsupwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+One-Arm+Dumbbell+Palms-Up+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+One-Arm+Dumbbell+Palms-Up+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated One-Arm Dumbbell Palms-Up Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seatedpalmupbarbellwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Palm-Up+Barbell+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Palm-Up+Barbell+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Palm-Up Barbell Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seatedpalmsdownbarbellwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Palms-Down+Barbell+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Palms-Down+Barbell+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Palms-Down Barbell Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "seatedtwoarmpalmsuplowpulleywristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Two-Arm+Palms-Up+Low-Pulley+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Two-Arm+Palms-Up+Low-Pulley+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Two-Arm Palms-Up Low-Pulley Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "standingolympicplatehandsqueeze": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Olympic+Plate+Hand+Squeeze+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Olympic+Plate+Hand+Squeeze+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Olympic Plate Hand Squeeze Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "standingpalmsupbarbellbehindthebackwristcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Palms-Up+Barbell+Behind+The+Back+Wrist+Curl+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Palms-Up+Barbell+Behind+The+Back+Wrist+Curl+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Palms-Up Barbell Behind The Back Wrist Curl Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "wristcircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wrist+Circles+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wrist+Circles+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wrist Circles Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "wristroller": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wrist+Roller+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wrist+Roller+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wrist Roller Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "wristrotationswithstraightbar": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wrist+Rotations+with+Straight+Bar+Forearms+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wrist+Rotations+with+Straight+Bar+Forearms+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wrist Rotations with Straight Bar Forearms exercise tutorial",
+ "category": "Forearms"
+ },
+ "ankleontheknee": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ankle+On+The+Knee+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ankle+On+The+Knee+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ankle On The Knee Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "barbellglutebridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Glute+Bridge+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Glute+Bridge+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Glute Bridge Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "barbellhipthrust": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Hip+Thrust+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Hip+Thrust+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Hip Thrust Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "buttliftbridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Butt+Lift+%28Bridge%29+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Butt+Lift+%28Bridge%29+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Butt Lift (Bridge) Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "downwardfacingbalance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Downward+Facing+Balance+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Downward+Facing+Balance+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Downward Facing Balance Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "flutterkicks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Flutter+Kicks+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Flutter+Kicks+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Flutter Kicks Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "glutekickback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Glute+Kickback+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Glute+Kickback+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Glute Kickback Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "hipextensionwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hip+Extension+with+Bands+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hip+Extension+with+Bands+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hip Extension with Bands Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "hipliftwithband": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hip+Lift+with+Band+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hip+Lift+with+Band+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hip Lift with Band Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "kneeacrossthebody": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Knee+Across+The+Body+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Knee+Across+The+Body+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Knee Across The Body Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "kneelingjumpsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Jump+Squat+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Jump+Squat+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Jump Squat Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "kneelingsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Squat+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Squat+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Squat Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "leglift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg+Lift+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg+Lift+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg Lift Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "lyingglute": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Glute+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Glute+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Glute Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "onekneetochest": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Knee+To+Chest+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Knee+To+Chest+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Knee To Chest Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "oneleggedcablekickback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Legged+Cable+Kickback+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Legged+Cable+Kickback+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Legged Cable Kickback Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "physioballhipbridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Physioball+Hip+Bridge+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Physioball+Hip+Bridge+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Physioball Hip Bridge Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "piriformissmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Piriformis-SMR+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Piriformis-SMR+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Piriformis-SMR Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "pullthrough": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pull+Through+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pull+Through+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pull Through Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "seatedglute": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Glute+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Glute+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Glute Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "singlelegglutebridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single+Leg+Glute+Bridge+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single+Leg+Glute+Bridge+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single Leg Glute Bridge Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "stepupwithkneeraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Step-up+with+Knee+Raise+Glutes+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Step-up+with+Knee+Raise+Glutes+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Step-up with Knee Raise Glutes exercise tutorial",
+ "category": "Glutes"
+ },
+ "9090hamstring": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=90%2F90+Hamstring+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=90%2F90+Hamstring+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "90/90 Hamstring Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "alternatinghangclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Hang+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Hang+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Hang Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "balllegcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ball+Leg+Curl+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ball+Leg+Curl+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ball Leg Curl Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "bandgoodmorning": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Good+Morning+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Good+Morning+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Good Morning Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "bandgoodmorningpullthrough": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Good+Morning+%28Pull+Through%29+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Good+Morning+%28Pull+Through%29+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Good Morning (Pull Through) Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "boxjumpmultipleresponse": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Box+Jump+%28Multiple+Response%29+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Box+Jump+%28Multiple+Response%29+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Box Jump (Multiple Response) Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "boxskip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Box+Skip+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Box+Skip+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Box Skip Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "chairlegextendedstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chair+Leg+Extended+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chair+Leg+Extended+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chair Leg Extended Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "clean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "cleandeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "doublekettlebellalternatinghangclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Alternating+Hang+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Alternating+Hang+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Kettlebell Alternating Hang Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "dumbbellclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "floorglutehamraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Floor+Glute-Ham+Raise+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Floor+Glute-Ham+Raise+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Floor Glute-Ham Raise Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "frontboxjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Box+Jump+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Box+Jump+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Box Jump Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "frontlegraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Leg+Raises+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Leg+Raises+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Leg Raises Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "glutehamraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Glute+Ham+Raise+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Glute+Ham+Raise+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Glute Ham Raise Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "goodmorning": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Good+Morning+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Good+Morning+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Good Morning Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "goodmorningoffpins": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Good+Morning+off+Pins+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Good+Morning+off+Pins+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Good Morning off Pins Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hamstringstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hamstring+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hamstring+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hamstring Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hamstringsmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hamstring-SMR+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hamstring-SMR+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hamstring-SMR Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hangsnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hang+Snatch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hang+Snatch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hang Snatch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hangsnatchbelowknees": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hang+Snatch+-+Below+Knees+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hang+Snatch+-+Below+Knees+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hang Snatch - Below Knees Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hangingbargoodmorning": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hanging+Bar+Good+Morning+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hanging+Bar+Good+Morning+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hanging Bar Good Morning Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "hurdlehops": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hurdle+Hops+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hurdle+Hops+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hurdle Hops Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "inchworm": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Inchworm+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Inchworm+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Inchworm Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "intermediategroinstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Intermediate+Groin+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Intermediate+Groin+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Intermediate Groin Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "kettlebelldeadclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Dead+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Dead+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Dead Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "kettlebellhangclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Hang+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Hang+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Hang Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "kettlebelloneleggeddeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+One-Legged+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+One-Legged+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell One-Legged Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "kneetuckjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Knee+Tuck+Jump+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Knee+Tuck+Jump+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Knee Tuck Jump Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "leguphamstringstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg-Up+Hamstring+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg-Up+Hamstring+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg-Up Hamstring Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "linear3partstarttechnique": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Linear+3-Part+Start+Technique+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Linear+3-Part+Start+Technique+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Linear 3-Part Start Technique Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "linearaccelerationwalldrill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Linear+Acceleration+Wall+Drill+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Linear+Acceleration+Wall+Drill+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Linear Acceleration Wall Drill Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "lungepassthrough": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lunge+Pass+Through+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lunge+Pass+Through+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lunge Pass Through Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "lyinghamstring": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Hamstring+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Hamstring+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Hamstring Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "lyinglegcurls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Leg+Curls+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Leg+Curls+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Leg Curls Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "movingclawseries": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Moving+Claw+Series+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Moving+Claw+Series+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Moving Claw Series Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "musclesnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Muscle+Snatch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Muscle+Snatch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Muscle Snatch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "naturalglutehamraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Natural+Glute+Ham+Raise+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Natural+Glute+Ham+Raise+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Natural Glute Ham Raise Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "onearmkettlebellclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "onearmkettlebellswings": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Swings+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Swings+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Swings Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "onearmopenpalmkettlebellclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Open+Palm+Kettlebell+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Open+Palm+Kettlebell+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Open Palm Kettlebell Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "openpalmkettlebellclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Open+Palm+Kettlebell+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Open+Palm+Kettlebell+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Open Palm Kettlebell Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "platformhamstringslides": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Platform+Hamstring+Slides+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Platform+Hamstring+Slides+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Platform Hamstring Slides Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "powerclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "powercleanfromblocks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Clean+from+Blocks+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Clean+from+Blocks+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Clean from Blocks Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "powersnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Snatch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Snatch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Snatch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "powerstairs": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Stairs+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Stairs+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Stairs Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "pronemanualhamstring": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Prone+Manual+Hamstring+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Prone+Manual+Hamstring+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Prone Manual Hamstring Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "prowlersprint": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Prowler+Sprint+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Prowler+Sprint+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Prowler Sprint Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "reversebandsumodeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Band+Sumo+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Band+Sumo+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Band Sumo Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "reversehyperextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Hyperextension+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Hyperextension+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Hyperextension Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "romaniandeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Romanian+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Romanian+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Romanian Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "romaniandeadliftfromdeficit": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Romanian+Deadlift+from+Deficit+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Romanian+Deadlift+from+Deficit+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Romanian Deadlift from Deficit Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "runnersstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Runner%27s+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Runner%27s+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Runner's Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "seatedbandhamstringcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Band+Hamstring+Curl+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Band+Hamstring+Curl+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Band Hamstring Curl Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "seatedfloorhamstringstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Floor+Hamstring+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Floor+Hamstring+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Floor Hamstring Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "seatedhamstring": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Hamstring+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Hamstring+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Hamstring Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "seatedhamstringandcalfstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Hamstring+and+Calf+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Hamstring+and+Calf+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Hamstring and Calf Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "seatedlegcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Leg+Curl+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Leg+Curl+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Leg Curl Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "smithmachinehangpowerclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Hang+Power+Clean+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Hang+Power+Clean+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Hang Power Clean Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "smithmachinestiffleggeddeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Stiff-Legged+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Stiff-Legged+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Stiff-Legged Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "snatchdeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "snatchpull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+Pull+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+Pull+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch Pull Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "splitsnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Snatch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Snatch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Snatch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "splitsquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Squats+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Squats+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Squats Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "standinghamstringandcalfstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Hamstring+and+Calf+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Hamstring+and+Calf+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Hamstring and Calf Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "standinglegcurl": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Leg+Curl+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Leg+Curl+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Leg Curl Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "standingtoetouches": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Toe+Touches+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Toe+Touches+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Toe Touches Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "stiffleggedbarbelldeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stiff-Legged+Barbell+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stiff-Legged+Barbell+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stiff-Legged Barbell Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "stiffleggeddumbbelldeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stiff-Legged+Dumbbell+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stiff-Legged+Dumbbell+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stiff-Legged Dumbbell Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "sumodeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sumo Deadlift Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "sumodeadliftwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+with+Bands+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+with+Bands+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sumo Deadlift with Bands Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "sumodeadliftwithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+with+Chains+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sumo+Deadlift+with+Chains+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sumo Deadlift with Chains Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "thestraddle": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=The+Straddle+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=The+Straddle+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "The Straddle Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "upperbackleggrab": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upper+Back-Leg+Grab+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upper+Back-Leg+Grab+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upper Back-Leg Grab Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "verticalswing": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Vertical+Swing+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Vertical+Swing+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Vertical Swing Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "widestancestifflegs": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide+Stance+Stiff+Legs+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide+Stance+Stiff+Legs+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide Stance Stiff Legs Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "worldsgreateststretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=World%27s+Greatest+Stretch+Hamstrings+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=World%27s+Greatest+Stretch+Hamstrings+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "World's Greatest Stretch Hamstrings exercise tutorial",
+ "category": "Hamstrings"
+ },
+ "bandassistedpullup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Assisted+Pull-Up+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Assisted+Pull-Up+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Assisted Pull-Up Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "bentarmbarbellpullover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent-Arm+Barbell+Pullover+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent-Arm+Barbell+Pullover+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent-Arm Barbell Pullover Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "cableinclinepushdown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Incline+Pushdown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Incline+Pushdown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Incline Pushdown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "catchandoverheadthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Catch+and+Overhead+Throw+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Catch+and+Overhead+Throw+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Catch and Overhead Throw Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "chairlowerbackstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chair+Lower+Back+Stretch+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chair+Lower+Back+Stretch+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chair Lower Back Stretch Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "chinup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chin-Up+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chin-Up+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chin-Up Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "closegripfrontlatpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+Front+Lat+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+Front+Lat+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip Front Lat Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "dynamicbackstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dynamic+Back+Stretch+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dynamic+Back+Stretch+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dynamic Back Stretch Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "elevatedcablerows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elevated+Cable+Rows+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elevated+Cable+Rows+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elevated Cable Rows Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "fullrangeofmotionlatpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Full+Range-Of-Motion+Lat+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Full+Range-Of-Motion+Lat+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Full Range-Of-Motion Lat Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "girondasternumchins": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Gironda+Sternum+Chins+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Gironda+Sternum+Chins+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Gironda Sternum Chins Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "kippingmuscleup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kipping+Muscle+Up+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kipping+Muscle+Up+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kipping Muscle Up Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "kneelinghighpulleyrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+High+Pulley+Row+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+High+Pulley+Row+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling High Pulley Row Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "kneelingsinglearmhighpulleyrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Single-Arm+High+Pulley+Row+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Single-Arm+High+Pulley+Row+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Single-Arm High Pulley Row Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "latissimusdorsismr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Latissimus+Dorsi-SMR+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Latissimus+Dorsi-SMR+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Latissimus Dorsi-SMR Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "leverageisorow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Iso+Row+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Iso+Row+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Iso Row Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "londonbridges": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=London+Bridges+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=London+Bridges+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "London Bridges Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "muscleup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Muscle+Up+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Muscle+Up+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Muscle Up Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "onearmagainstwall": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Against+Wall+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Against+Wall+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Against Wall Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "onearmlatpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Lat+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Lat+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Lat Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "onehandedhang": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Handed+Hang+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Handed+Hang+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Handed Hang Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "overheadlat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Lat+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Lat+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Lat Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "overheadslam": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Slam+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Slam+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Slam Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "pullups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pullups+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pullups+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pullups Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "rockypullupspulldowns": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rocky+Pull-Ups%2FPulldowns+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rocky+Pull-Ups%2FPulldowns+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rocky Pull-Ups/Pulldowns Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "ropeclimb": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rope+Climb+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rope+Climb+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rope Climb Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "ropestraightarmpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rope+Straight-Arm+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rope+Straight-Arm+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rope Straight-Arm Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "shotgunrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Shotgun+Row+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Shotgun+Row+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Shotgun Row Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "sidetosidechins": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+To+Side+Chins+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+To+Side+Chins+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side To Side Chins Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "sidelyingfloorstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side-Lying+Floor+Stretch+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side-Lying+Floor+Stretch+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side-Lying Floor Stretch Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "straightarmpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Straight-Arm+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Straight-Arm+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Straight-Arm Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "underhandcablepulldowns": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Underhand+Cable+Pulldowns+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Underhand+Cable+Pulldowns+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Underhand Cable Pulldowns Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "vbarpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=V-Bar+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=V-Bar+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "V-Bar Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "vbarpullup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=V-Bar+Pullup+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=V-Bar+Pullup+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "V-Bar Pullup Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "weightedpullups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Pull+Ups+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Pull+Ups+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Pull Ups Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "widegriplatpulldown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Lat+Pulldown+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Lat+Pulldown+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Lat Pulldown Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "widegrippulldownbehindtheneck": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Pulldown+Behind+The+Neck+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Pulldown+Behind+The+Neck+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Pulldown Behind The Neck Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "widegriprearpullup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide-Grip+Rear+Pull-Up+Lats+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide-Grip+Rear+Pull-Up+Lats+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide-Grip Rear Pull-Up Lats exercise tutorial",
+ "category": "Lats"
+ },
+ "atlasstonetrainer": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Atlas+Stone+Trainer+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Atlas+Stone+Trainer+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Atlas Stone Trainer Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "atlasstones": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Atlas+Stones+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Atlas+Stones+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Atlas Stones Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "axledeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Axle+Deadlift+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Axle+Deadlift+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Axle Deadlift Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "barbelldeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Deadlift+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Deadlift+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Deadlift Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "catstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cat+Stretch+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cat+Stretch+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cat Stretch Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "childspose": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Child%27s+Pose+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Child%27s+Pose+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Child's Pose Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "crossoverreverselunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Crossover+Reverse+Lunge+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Crossover+Reverse+Lunge+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Crossover Reverse Lunge Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "dancersstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dancer%27s+Stretch+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dancer%27s+Stretch+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dancer's Stretch Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "deadliftwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Deadlift+with+Bands+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Deadlift+with+Bands+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Deadlift with Bands Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "deadliftwithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Deadlift+with+Chains+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Deadlift+with+Chains+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Deadlift with Chains Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "deficitdeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Deficit+Deadlift+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Deficit+Deadlift+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Deficit Deadlift Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "hugaball": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hug+A+Ball+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hug+A+Ball+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hug A Ball Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "hugkneestochest": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hug+Knees+To+Chest+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hug+Knees+To+Chest+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hug Knees To Chest Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "hyperextensionsbackextensions": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hyperextensions+%28Back+Extensions%29+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hyperextensions+%28Back+Extensions%29+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hyperextensions (Back Extensions) Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "hyperextensionswithnohyperextensionbench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hyperextensions+With+No+Hyperextension+Bench+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hyperextensions+With+No+Hyperextension+Bench+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hyperextensions With No Hyperextension Bench Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "kegload": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Keg+Load+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Keg+Load+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Keg Load Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "lowerbacksmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lower+Back-SMR+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lower+Back-SMR+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lower Back-SMR Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "pelvictiltintobridge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pelvic+Tilt+Into+Bridge+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pelvic+Tilt+Into+Bridge+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pelvic Tilt Into Bridge Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "pyramid": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pyramid+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pyramid+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pyramid Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "rackpullwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rack+Pull+with+Bands+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rack+Pull+with+Bands+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rack Pull with Bands Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "rackpulls": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rack+Pulls+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rack+Pulls+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rack Pulls Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "reversebanddeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Band+Deadlift+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Band+Deadlift+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Band Deadlift Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "seatedgoodmornings": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Good+Mornings+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Good+Mornings+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Good Mornings Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "standingpelvictilt": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Pelvic+Tilt+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Pelvic+Tilt+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Pelvic Tilt Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "stifflegbarbellgoodmorning": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stiff+Leg+Barbell+Good+Morning+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stiff+Leg+Barbell+Good+Morning+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stiff Leg Barbell Good Morning Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "superman": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Superman+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Superman+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Superman Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "weightedballhyperextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Ball+Hyperextension+Lower+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Ball+Hyperextension+Lower+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Ball Hyperextension Lower back exercise tutorial",
+ "category": "Lower back"
+ },
+ "alternatingkettlebellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Kettlebell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Kettlebell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Kettlebell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "alternatingrenegaderow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Renegade+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Renegade+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Renegade Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bentoverbarbellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Barbell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Barbell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Barbell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bentoveronearmlongbarrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+One-Arm+Long+Bar+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+One-Arm+Long+Bar+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over One-Arm Long Bar Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bentovertwoarmlongbarrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Arm+Long+Bar+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Arm+Long+Bar+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Two-Arm Long Bar Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bentovertwodumbbellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Dumbbell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Dumbbell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Two-Dumbbell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bentovertwodumbbellrowwithpalmsin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Dumbbell+Row+With+Palms+In+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Two-Dumbbell+Row+With+Palms+In+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Two-Dumbbell Row With Palms In Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "bodyweightmidrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bodyweight+Mid+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bodyweight+Mid+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bodyweight Mid Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "dumbbellinclinerow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Incline+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Incline+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Incline Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "inclinebenchpull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Bench+Pull+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Bench+Pull+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Bench Pull Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "invertedrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Inverted+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Inverted+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Inverted Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "invertedrowwithstraps": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Inverted+Row+with+Straps+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Inverted+Row+with+Straps+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Inverted Row with Straps Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "leveragehighrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+High+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+High+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage High Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "lyingcamberedbarbellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Cambered+Barbell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Cambered+Barbell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Cambered Barbell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "lyingtbarrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+T-Bar+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+T-Bar+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying T-Bar Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "middlebackshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Middle+Back+Shrug+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Middle+Back+Shrug+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Middle Back Shrug Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "middlebackstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Middle+Back+Stretch+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Middle+Back+Stretch+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Middle Back Stretch Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "mixedgripchin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Mixed+Grip+Chin+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Mixed+Grip+Chin+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Mixed Grip Chin Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "onearmchinup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Chin-Up+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Chin-Up+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Chin-Up Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "onearmdumbbellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Dumbbell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Dumbbell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Dumbbell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "onearmkettlebellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "onearmlongbarrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Long+Bar+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Long+Bar+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Long Bar Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "reversegripbentoverrows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Grip+Bent-Over+Rows+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Grip+Bent-Over+Rows+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Grip Bent-Over Rows Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "rhomboidssmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rhomboids-SMR+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rhomboids-SMR+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rhomboids-SMR Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "seatedcablerows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Cable+Rows+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Cable+Rows+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Cable Rows Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "seatedonearmcablepulleyrows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+One-arm+Cable+Pulley+Rows+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+One-arm+Cable+Pulley+Rows+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated One-arm Cable Pulley Rows Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "sledrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "smithmachinebentoverrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Bent+Over+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Bent+Over+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Bent Over Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "spinalstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Spinal+Stretch+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Spinal+Stretch+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Spinal Stretch Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "straightbarbenchmidrows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Straight+Bar+Bench+Mid+Rows+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Straight+Bar+Bench+Mid+Rows+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Straight Bar Bench Mid Rows Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "suspendedrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Suspended+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Suspended+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Suspended Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "tbarrowwithhandle": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=T-Bar+Row+with+Handle+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=T-Bar+Row+with+Handle+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "T-Bar Row with Handle Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "twoarmkettlebellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Row+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Row+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Two-Arm Kettlebell Row Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "upperbackstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upper+Back+Stretch+Middle+back+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upper+Back+Stretch+Middle+back+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upper Back Stretch Middle back exercise tutorial",
+ "category": "Middle back"
+ },
+ "chintocheststretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chin+To+Chest+Stretch+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chin+To+Chest+Stretch+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chin To Chest Stretch Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "isometricneckexercisefrontandback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Isometric+Neck+Exercise+-+Front+And+Back+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Isometric+Neck+Exercise+-+Front+And+Back+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Isometric Neck Exercise - Front And Back Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "isometricneckexercisesides": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Isometric+Neck+Exercise+-+Sides+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Isometric+Neck+Exercise+-+Sides+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Isometric Neck Exercise - Sides Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "lyingfacedownplateneckresistance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Face+Down+Plate+Neck+Resistance+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Face+Down+Plate+Neck+Resistance+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Face Down Plate Neck Resistance Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "lyingfaceupplateneckresistance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Face+Up+Plate+Neck+Resistance+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Face+Up+Plate+Neck+Resistance+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Face Up Plate Neck Resistance Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "necksmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Neck-SMR+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Neck-SMR+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Neck-SMR Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "seatedheadharnessneckresistance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Head+Harness+Neck+Resistance+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Head+Harness+Neck+Resistance+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Head Harness Neck Resistance Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "sideneckstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Neck+Stretch+Neck+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Neck+Stretch+Neck+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Neck Stretch Neck exercise tutorial",
+ "category": "Neck"
+ },
+ "allfoursquadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=All+Fours+Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=All+Fours+Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "All Fours Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "alternatelegdiagonalbound": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternate+Leg+Diagonal+Bound+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternate+Leg+Diagonal+Bound+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternate Leg Diagonal Bound Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "backwarddrag": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Backward+Drag+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Backward+Drag+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Backward Drag Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellfullsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Full+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Full+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Full Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellhacksquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Hack+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Hack+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Hack Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbelllunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Lunge+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Lunge+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Lunge Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellsidesplitsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Side+Split+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Side+Split+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Side Split Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellsquattoabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Squat To A Bench Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellstepups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Step+Ups+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Step+Ups+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Step Ups Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "barbellwalkinglunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Walking+Lunge+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Walking+Lunge+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Walking Lunge Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "bearcrawlsleddrags": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bear+Crawl+Sled+Drags+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bear+Crawl+Sled+Drags+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bear Crawl Sled Drags Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "benchjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "benchsprint": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Sprint+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Sprint+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Sprint Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "bicycling": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bicycling+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bicycling+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bicycling Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "bicyclingstationary": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bicycling%2C+Stationary+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bicycling%2C+Stationary+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bicycling, Stationary Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "bodyweightsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bodyweight+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bodyweight+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bodyweight Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "bodyweightwalkinglunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bodyweight+Walking+Lunge+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bodyweight+Walking+Lunge+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bodyweight Walking Lunge Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "boxsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Box+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Box+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Box Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "boxsquatwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Box+Squat+with+Bands+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Box+Squat+with+Bands+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Box Squat with Bands Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "boxsquatwithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Box+Squat+with+Chains+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Box+Squat+with+Chains+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Box Squat with Chains Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "cabledeadlifts": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Deadlifts+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Deadlifts+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Deadlifts Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "cablehipadduction": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Hip+Adduction+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Hip+Adduction+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Hip Adduction Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "cardeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Car+Deadlift+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Car+Deadlift+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Car Deadlift Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "chairsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chair+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chair+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chair Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "cleanpull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+Pull+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+Pull+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean Pull Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "cleanfromblocks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+from+Blocks+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+from+Blocks+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean from Blocks Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "conanswheel": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Conan%27s+Wheel+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Conan%27s+Wheel+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Conan's Wheel Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "depthjumpleap": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Depth+Jump+Leap+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Depth+Jump+Leap+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Depth Jump Leap Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "doublelegbuttkick": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Leg+Butt+Kick+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Leg+Butt+Kick+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Leg Butt Kick Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbelllunges": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Lunges+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Lunges+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Lunges Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbellrearlunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Rear+Lunge+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Rear+Lunge+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Rear Lunge Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbellseatedboxjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Seated+Box+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Seated+Box+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Seated Box Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbellsquattoabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Squat To A Bench Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "dumbbellstepups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Step+Ups+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Step+Ups+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Step Ups Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "elevatedbacklunge": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elevated+Back+Lunge+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elevated+Back+Lunge+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elevated Back Lunge Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "ellipticaltrainer": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elliptical+Trainer+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elliptical+Trainer+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elliptical Trainer Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "fastskipping": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Fast+Skipping+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Fast+Skipping+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Fast Skipping Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frankensteinsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Frankenstein+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Frankenstein+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Frankenstein Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "freehandjumpsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Freehand+Jump+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Freehand+Jump+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Freehand Jump Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "froghops": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Frog+Hops+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Frog+Hops+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Frog Hops Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frontbarbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Barbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Barbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Barbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frontbarbellsquattoabench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Barbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Barbell+Squat+To+A+Bench+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Barbell Squat To A Bench Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frontconehopsorhurdlehops": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Cone+Hops+%28or+hurdle+hops%29+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Cone+Hops+%28or+hurdle+hops%29+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Cone Hops (or hurdle hops) Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frontsquatcleangrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Squat+%28Clean+Grip%29+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Squat+%28Clean+Grip%29+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Squat (Clean Grip) Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "frontsquatswithtwokettlebells": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Squats+With+Two+Kettlebells+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Squats+With+Two+Kettlebells+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Squats With Two Kettlebells Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "gobletsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Goblet+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Goblet+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Goblet Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "hacksquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hack+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hack+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hack Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "hangclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hang+Clean+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hang+Clean+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hang Clean Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "hangcleanbelowtheknees": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hang+Clean+-+Below+the+Knees+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hang+Clean+-+Below+the+Knees+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hang Clean - Below the Knees Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "heavingsnatchbalance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Heaving+Snatch+Balance+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Heaving+Snatch+Balance+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Heaving Snatch Balance Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "hipflexionwithband": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Hip+Flexion+with+Band+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Hip+Flexion+with+Band+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Hip Flexion with Band Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "intermediatehipflexorandquadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Intermediate+Hip+Flexor+and+Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Intermediate+Hip+Flexor+and+Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Intermediate Hip Flexor and Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "ironcrossesstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Iron+Crosses+%28stretch%29+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Iron+Crosses+%28stretch%29+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Iron Crosses (stretch) Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "jeffersonsquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Jefferson+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Jefferson+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Jefferson Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "jerkdipsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Jerk+Dip+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Jerk+Dip+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Jerk Dip Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "joggingtreadmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Jogging%2C+Treadmill+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Jogging%2C+Treadmill+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Jogging, Treadmill Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "kettlebellpistolsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Pistol+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Pistol+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Pistol Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "kneelinghipflexor": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Hip+Flexor+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Hip+Flexor+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Hip Flexor Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "legextensions": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg+Extensions+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg+Extensions+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg Extensions Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "legpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leg+Press+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leg+Press+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leg Press Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "leveragedeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Deadlift+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Deadlift+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Deadlift Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "lineardepthjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Linear+Depth+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Linear+Depth+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Linear Depth Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "lookingatceiling": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Looking+At+Ceiling+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Looking+At+Ceiling+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Looking At Ceiling Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "lungesprint": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lunge+Sprint+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lunge+Sprint+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lunge Sprint Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "lyingmachinesquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Machine+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Machine+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Machine Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "lyingpronequadriceps": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Prone+Quadriceps+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Prone+Quadriceps+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Prone Quadriceps Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "mountainclimbers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Mountain+Climbers+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Mountain+Climbers+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Mountain Climbers Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "narrowstancehacksquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Hack+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Hack+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Narrow Stance Hack Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "narrowstancelegpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Leg+Press+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Leg+Press+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Narrow Stance Leg Press Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "narrowstancesquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Narrow+Stance+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Narrow Stance Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "olympicsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Olympic+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Olympic+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Olympic Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onyoursidequadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=On+Your+Side+Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=On+Your+Side+Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "On Your Side Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onyourbackquadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=On-Your-Back+Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=On-Your-Back+Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "On-Your-Back Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onehalflocust": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Half+Locust+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Half+Locust+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Half Locust Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onelegbarbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Leg+Barbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Leg+Barbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Leg Barbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onearmoverheadkettlebellsquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Overhead+Kettlebell+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Overhead+Kettlebell+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Overhead Kettlebell Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "onearmsidedeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Side+Deadlift+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Side+Deadlift+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Side Deadlift Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "overheadsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "pliedumbbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Plie+Dumbbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Plie+Dumbbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Plie Dumbbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "powerjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Jerk+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Jerk+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Jerk Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "powersnatchfromblocks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Snatch+from+Blocks+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Snatch+from+Blocks+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Snatch from Blocks Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "quadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "quadricepssmr": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Quadriceps-SMR+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Quadriceps-SMR+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Quadriceps-SMR Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "quickleap": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Quick+Leap+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Quick+Leap+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Quick Leap Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "rearlegraises": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rear+Leg+Raises+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rear+Leg+Raises+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rear Leg Raises Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "recumbentbike": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Recumbent+Bike+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Recumbent+Bike+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Recumbent Bike Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "reversebandboxsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Band+Box+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Band+Box+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Band Box Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "reversebandpowersquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Band+Power+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Band+Power+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Band Power Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "rickshawdeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rickshaw+Deadlift+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rickshaw+Deadlift+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rickshaw Deadlift Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "rocketjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rocket+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rocket+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rocket Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "ropejumping": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rope+Jumping+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rope+Jumping+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rope Jumping Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "rowingstationary": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rowing%2C+Stationary+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rowing%2C+Stationary+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rowing, Stationary Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "runningtreadmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Running%2C+Treadmill+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Running%2C+Treadmill+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Running, Treadmill Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sandbagload": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sandbag+Load+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sandbag+Load+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sandbag Load Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "scissorsjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Scissors+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Scissors+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Scissors Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sidehopsprint": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Hop-Sprint+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Hop-Sprint+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Hop-Sprint Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sidestandinglongjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Standing+Long+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Standing+Long+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Standing Long Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sidetosideboxshuffle": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+to+Side+Box+Shuffle+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+to+Side+Box+Shuffle+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side to Side Box Shuffle Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singlelegbuttkick": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single+Leg+Butt+Kick+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single+Leg+Butt+Kick+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single Leg Butt Kick Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singlelegpushoff": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single+Leg+Push-off+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single+Leg+Push-off+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single Leg Push-off Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singleconesprintdrill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Cone+Sprint+Drill+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Cone+Sprint+Drill+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Cone Sprint Drill Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singleleghighboxsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Leg+High+Box+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Leg+High+Box+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Leg High Box Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singleleghopprogression": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Leg+Hop+Progression+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Leg+Hop+Progression+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Leg Hop Progression Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singleleglateralhop": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Leg+Lateral+Hop+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Leg+Lateral+Hop+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Leg Lateral Hop Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singleleglegextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Leg+Leg+Extension+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Leg+Leg+Extension+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Leg Leg Extension Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "singlelegstridejump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Leg+Stride+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Leg+Stride+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Leg Stride Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sitsquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sit+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sit+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sit Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "skating": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Skating+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Skating+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Skating Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sleddragharness": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Drag+-+Harness+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Drag+-+Harness+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Drag - Harness Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "sledpush": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Push+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Push+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Push Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "smithmachinelegpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Leg+Press+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Leg+Press+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Leg Press Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "smithmachinepistolsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Pistol+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Pistol+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Pistol Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "smithmachinesquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "smithsinglelegsplitsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Single-Leg+Split+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Single-Leg+Split+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Single-Leg Split Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "snatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "snatchbalance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+Balance+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+Balance+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch Balance Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "snatchfromblocks": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+from+Blocks+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+from+Blocks+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch from Blocks Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "speedboxsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Speed+Box+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Speed+Box+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Speed Box Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "speedsquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Speed+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Speed+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Speed Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "splitclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Clean+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Clean+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Clean Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "splitjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Jerk+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Jerk+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Jerk Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "splitjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "splitsquatwithdumbbells": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Split+Squat+with+Dumbbells+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Split+Squat+with+Dumbbells+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Split Squat with Dumbbells Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "squatjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Squat+Jerk+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Squat+Jerk+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Squat Jerk Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "squatwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Squat+with+Bands+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Squat+with+Bands+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Squat with Bands Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "squatwithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Squat+with+Chains+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Squat+with+Chains+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Squat with Chains Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "squatwithplatemovers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Squat+with+Plate+Movers+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Squat+with+Plate+Movers+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Squat with Plate Movers Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "squatswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Squats+-+With+Bands+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Squats+-+With+Bands+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Squats - With Bands Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "stairmaster": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stairmaster+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stairmaster+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stairmaster Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "standingelevatedquadstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Elevated+Quad+Stretch+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Elevated+Quad+Stretch+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Elevated Quad Stretch Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "standinghipflexors": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Hip+Flexors+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Hip+Flexors+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Hip Flexors Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "standinglongjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Long+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Long+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Long Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "starjump": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Star+Jump+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Star+Jump+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Star Jump Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "stepmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Step+Mill+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Step+Mill+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Step Mill Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "stridejumpcrossover": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Stride+Jump+Crossover+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Stride+Jump+Crossover+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Stride Jump Crossover Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "suspendedsplitsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Suspended+Split+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Suspended+Split+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Suspended Split Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "tireflip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Tire+Flip+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Tire+Flip+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Tire Flip Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "trailrunningwalking": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Trail+Running%2FWalking+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Trail+Running%2FWalking+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Trail Running/Walking Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "trapbardeadlift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Trap+Bar+Deadlift+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Trap+Bar+Deadlift+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Trap Bar Deadlift Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "walkingtreadmill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Walking%2C+Treadmill+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Walking%2C+Treadmill+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Walking, Treadmill Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "weightedjumpsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Jump+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Jump+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Jump Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "weightedsissysquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Sissy+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Sissy+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Sissy Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "weightedsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "widestancebarbellsquat": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Wide+Stance+Barbell+Squat+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Wide+Stance+Barbell+Squat+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Wide Stance Barbell Squat Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "yokewalk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Yoke+Walk+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Yoke+Walk+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Yoke Walk Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "zerchersquats": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Zercher+Squats+Quadriceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Zercher+Squats+Quadriceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Zercher Squats Quadriceps exercise tutorial",
+ "category": "Quadriceps"
+ },
+ "alternatingcableshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Cable+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Cable+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Cable Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "alternatingdeltoidraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Deltoid+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Deltoid+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Deltoid Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "alternatingkettlebellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Alternating+Kettlebell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Alternating+Kettlebell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Alternating Kettlebell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "antigravitypress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Anti-Gravity+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Anti-Gravity+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Anti-Gravity Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "armcircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Arm+Circles+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Arm+Circles+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Arm Circles Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "arnolddumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Arnold+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Arnold+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Arnold Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "backflyeswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Back+Flyes+-+With+Bands+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Back+Flyes+-+With+Bands+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Back Flyes - With Bands Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "backwardmedicineballthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Backward+Medicine+Ball+Throw+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Backward+Medicine+Ball+Throw+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Backward Medicine Ball Throw Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "bandpullapart": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Pull+Apart+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Pull+Apart+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Pull Apart Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "barbellinclineshoulderraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Incline+Shoulder+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Incline+Shoulder+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Incline Shoulder Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "barbellreardeltrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Rear+Delt+Row+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Rear+Delt+Row+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Rear Delt Row Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "barbellshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "battlingropes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Battling+Ropes+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Battling+Ropes+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Battling Ropes Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "bentoverdumbbellreardeltraisewithheadonbench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Dumbbell+Rear+Delt+Raise+With+Head+On+Bench+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Dumbbell+Rear+Delt+Raise+With+Head+On+Bench+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Dumbbell Rear Delt Raise With Head On Bench Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "bentoverlowpulleysidelateral": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bent+Over+Low-Pulley+Side+Lateral+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bent+Over+Low-Pulley+Side+Lateral+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bent Over Low-Pulley Side Lateral Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "bradfordrockypresses": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bradford%2FRocky+Presses+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bradford%2FRocky+Presses+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bradford/Rocky Presses Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cableinternalrotation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Internal+Rotation+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Internal+Rotation+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Internal Rotation Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cablereardeltfly": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Rear+Delt+Fly+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Rear+Delt+Fly+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Rear Delt Fly Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cableropereardeltrows": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Rope+Rear-Delt+Rows+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Rope+Rear-Delt+Rows+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Rope Rear-Delt Rows Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cableseatedlateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Seated+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Seated+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Seated Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cableshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cardrivers": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Car+Drivers+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Car+Drivers+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Car Drivers Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "chairupperbodystretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chair+Upper+Body+Stretch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chair+Upper+Body+Stretch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chair Upper Body Stretch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "circusbell": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Circus+Bell+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Circus+Bell+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Circus Bell Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cleanandjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+and+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+and+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean and Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cleanandpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+and+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+and+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean and Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "crucifix": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Crucifix+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Crucifix+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Crucifix Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "cubanpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cuban+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cuban+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cuban Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "doublekettlebelljerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Kettlebell Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "doublekettlebellpushpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Push+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Push+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Kettlebell Push Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "doublekettlebellsnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Snatch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Double+Kettlebell+Snatch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Double Kettlebell Snatch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellinclineshoulderraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Incline+Shoulder+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Incline+Shoulder+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Incline Shoulder Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbelllyingonearmrearlateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+One-Arm+Rear+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+One-Arm+Rear+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Lying One-Arm Rear Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbelllyingrearlateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Rear+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Lying+Rear+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Lying Rear Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellonearmshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell One-Arm Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellonearmuprightrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Upright+Row+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Upright+Row+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell One-Arm Upright Row Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellscaption": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Scaption+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Scaption+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Scaption Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "dumbbellshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "elbowcircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Elbow+Circles+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Elbow+Circles+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Elbow Circles Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "externalrotation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=External+Rotation+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=External+Rotation+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "External Rotation Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "externalrotationwithband": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=External+Rotation+with+Band+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=External+Rotation+with+Band+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "External Rotation with Band Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "externalrotationwithcable": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=External+Rotation+with+Cable+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=External+Rotation+with+Cable+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "External Rotation with Cable Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "facepull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Face+Pull+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Face+Pull+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Face Pull Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "frontcableraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Cable+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Cable+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Cable Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "frontdumbbellraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Dumbbell+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Dumbbell+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Dumbbell Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "frontinclinedumbbellraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Incline+Dumbbell+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Incline+Dumbbell+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Incline Dumbbell Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "frontplateraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Plate+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Plate+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Plate Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "fronttwodumbbellraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Front+Two-Dumbbell+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Front+Two-Dumbbell+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Front Two-Dumbbell Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "handstandpushups": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Handstand+Push-Ups+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Handstand+Push-Ups+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Handstand Push-Ups Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "internalrotationwithband": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Internal+Rotation+with+Band+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Internal+Rotation+with+Band+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Internal Rotation with Band Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "ironcross": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Iron+Cross+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Iron+Cross+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Iron Cross Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "jerkbalance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Jerk+Balance+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Jerk+Balance+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Jerk Balance Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellarnoldpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Arnold+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Arnold+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Arnold Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellpirateships": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Pirate+Ships+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Pirate+Ships+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Pirate Ships Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellseatedpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Seated+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Seated+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Seated Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellseesawpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Seesaw+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Seesaw+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Seesaw Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellthruster": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Thruster+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Thruster+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Thruster Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellturkishgetuplungestyle": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Turkish+Get-Up+%28Lunge+style%29+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Turkish+Get-Up+%28Lunge+style%29+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Turkish Get-Up (Lunge style) Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kettlebellturkishgetupsquatstyle": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Turkish+Get-Up+%28Squat+style%29+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Turkish+Get-Up+%28Squat+style%29+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Turkish Get-Up (Squat style) Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "kneelingarmdrill": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Arm+Drill+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Arm+Drill+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Arm Drill Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "landminelinearjammer": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Landmine+Linear+Jammer+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Landmine+Linear+Jammer+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Landmine Linear Jammer Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "lateralraisewithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lateral+Raise+-+With+Bands+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lateral+Raise+-+With+Bands+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lateral Raise - With Bands Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "leverageshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "loglift": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Log+Lift+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Log+Lift+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Log Lift Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "lowpulleyrowtoneck": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Low+Pulley+Row+To+Neck+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Low+Pulley+Row+To+Neck+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Low Pulley Row To Neck Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "lyingonearmlateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+One-Arm+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+One-Arm+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying One-Arm Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "lyingreardeltraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Rear+Delt+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Rear+Delt+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Rear Delt Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "machineshouldermilitarypress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Machine+Shoulder+%28Military%29+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Machine+Shoulder+%28Military%29+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Machine Shoulder (Military) Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "medicineballscoopthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Scoop+Throw+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Medicine+Ball+Scoop+Throw+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Medicine Ball Scoop Throw Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearminclinelateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Incline+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Incline+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Incline Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellcleanandjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Clean+and+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Clean+and+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Clean and Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebelljerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellmilitarypresstotheside": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Military+Press+To+The+Side+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Military+Press+To+The+Side+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Military Press To The Side Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellparapress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Para+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Para+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Para Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellpushpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Push+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Push+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Push Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellsnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Snatch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Snatch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Snatch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellsplitjerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Split+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Split+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Split Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmkettlebellsplitsnatch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Split+Snatch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Kettlebell+Split+Snatch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Kettlebell Split Snatch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "onearmsidelaterals": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One-Arm+Side+Laterals+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One-Arm+Side+Laterals+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One-Arm Side Laterals Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "powerpartials": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Power+Partials+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Power+Partials+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Power Partials Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "pushpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "pushpressbehindtheneck": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push+Press+-+Behind+the+Neck+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push+Press+-+Behind+the+Neck+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push Press - Behind the Neck Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "rackdelivery": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Rack+Delivery+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Rack+Delivery+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Rack Delivery Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "returnpushfromstance": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Return+Push+from+Stance+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Return+Push+from+Stance+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Return Push from Stance Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "reverseflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Flyes+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Flyes+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Flyes Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "reverseflyeswithexternalrotation": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Flyes+With+External+Rotation+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Flyes+With+External+Rotation+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Flyes With External Rotation Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "reversemachineflyes": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Machine+Flyes+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Machine+Flyes+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Machine Flyes Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "roundtheworldshoulderstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Round+The+World+Shoulder+Stretch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Round+The+World+Shoulder+Stretch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Round The World Shoulder Stretch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seatedbarbellmilitarypress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Barbell+Military+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Barbell+Military+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Barbell Military Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seatedbentoverreardeltraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+Rear+Delt+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+Rear+Delt+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Bent-Over Rear Delt Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seatedcableshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Cable+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Cable+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Cable Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seateddumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seatedfrontdeltoid": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Front+Deltoid+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Front+Deltoid+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Front Deltoid Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seatedsidelateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Side+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Side+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Side Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "seesawpressalternatingsidepress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=See-Saw+Press+%28Alternating+Side+Press%29+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=See-Saw+Press+%28Alternating+Side+Press%29+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "See-Saw Press (Alternating Side Press) Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "shouldercircles": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Shoulder+Circles+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Shoulder+Circles+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Shoulder Circles Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "shoulderpresswithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Shoulder+Press+-+With+Bands+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Shoulder+Press+-+With+Bands+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Shoulder Press - With Bands Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "shoulderraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Shoulder+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Shoulder+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Shoulder Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "shoulderstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Shoulder+Stretch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Shoulder+Stretch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Shoulder Stretch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "sidelateralraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Lateral+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Lateral+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Lateral Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "sidelateralstofrontraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Laterals+to+Front+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Laterals+to+Front+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Laterals to Front Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "sidewristpull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Side+Wrist+Pull+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Side+Wrist+Pull+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Side Wrist Pull Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "singledumbbellraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single+Dumbbell+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single+Dumbbell+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single Dumbbell Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "singlearmlinearjammer": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Single-Arm+Linear+Jammer+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Single-Arm+Linear+Jammer+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Single-Arm Linear Jammer Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "sledoverheadbackwardwalk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Overhead+Backward+Walk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Overhead+Backward+Walk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Overhead Backward Walk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "sledreverseflye": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Reverse+Flye+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Reverse+Flye+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Reverse Flye Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "smithinclineshoulderraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Incline+Shoulder+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Incline+Shoulder+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Incline Shoulder Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "smithmachineonearmuprightrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+One-Arm+Upright+Row+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+One-Arm+Upright+Row+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine One-Arm Upright Row Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "smithmachineoverheadshoulderpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Overhead+Shoulder+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Overhead+Shoulder+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Overhead Shoulder Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingalternatingdumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Alternating+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Alternating+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Alternating Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingbarbellpressbehindneck": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Barbell+Press+Behind+Neck+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Barbell+Press+Behind+Neck+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Barbell Press Behind Neck Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingbradfordpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Bradford+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Bradford+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Bradford Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingdumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingdumbbellstraightarmfrontdeltraiseabovehead": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Straight-Arm+Front+Delt+Raise+Above+Head+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Straight-Arm+Front+Delt+Raise+Above+Head+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Straight-Arm Front Delt Raise Above Head Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingfrontbarbellraiseoverhead": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Front+Barbell+Raise+Over+Head+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Front+Barbell+Raise+Over+Head+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Front Barbell Raise Over Head Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standinglowpulleydeltoidraise": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Low-Pulley+Deltoid+Raise+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Low-Pulley+Deltoid+Raise+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Low-Pulley Deltoid Raise Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingmilitarypress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Military+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Military+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Military Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingpalminonearmdumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Palm-In+One-Arm+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Palm-In+One-Arm+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Palm-In One-Arm Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingpalmsindumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Palms-In+Dumbbell+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Palms-In+Dumbbell+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Palms-In Dumbbell Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "standingtwoarmoverheadthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Two-Arm+Overhead+Throw+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Two-Arm+Overhead+Throw+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Two-Arm Overhead Throw Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "straightraisesoninclinebench": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Straight+Raises+on+Incline+Bench+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Straight+Raises+on+Incline+Bench+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Straight Raises on Incline Bench Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "twoarmkettlebellclean": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Clean+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Clean+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Two-Arm Kettlebell Clean Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "twoarmkettlebelljerk": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Jerk+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Jerk+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Two-Arm Kettlebell Jerk Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "twoarmkettlebellmilitarypress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Military+Press+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Two-Arm+Kettlebell+Military+Press+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Two-Arm Kettlebell Military Press Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "uprightbarbellrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upright+Barbell+Row+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upright+Barbell+Row+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upright Barbell Row Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "upwardstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upward+Stretch+Shoulders+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upward+Stretch+Shoulders+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upward Stretch Shoulders exercise tutorial",
+ "category": "Shoulders"
+ },
+ "barbellshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "barbellshrugbehindtheback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Barbell+Shrug+Behind+The+Back+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Barbell+Shrug+Behind+The+Back+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Barbell Shrug Behind The Back Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "cableshrugs": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Shrugs+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Shrugs+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Shrugs Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "calfmachineshouldershrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Calf-Machine+Shoulder+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Calf-Machine+Shoulder+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Calf-Machine Shoulder Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "cleanshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Clean+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Clean+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Clean Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "dumbbellshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "kettlebellsumohighpull": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kettlebell+Sumo+High+Pull+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kettlebell+Sumo+High+Pull+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kettlebell Sumo High Pull Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "leverageshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Leverage+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Leverage+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Leverage Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "scapularpullup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Scapular+Pull-Up+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Scapular+Pull-Up+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Scapular Pull-Up Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "smithmachinebehindthebackshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Behind+the+Back+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Behind+the+Back+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Behind the Back Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "smithmachineuprightrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Upright+Row+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Upright+Row+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Upright Row Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "snatchshrug": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Snatch+Shrug+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Snatch+Shrug+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Snatch Shrug Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "standingdumbbelluprightrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Upright+Row+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Upright+Row+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Upright Row Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "uprightcablerow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upright+Cable+Row+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upright+Cable+Row+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upright Cable Row Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "uprightrowwithbands": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Upright+Row+-+With+Bands+Traps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Upright+Row+-+With+Bands+Traps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Upright Row - With Bands Traps exercise tutorial",
+ "category": "Traps"
+ },
+ "bandskullcrusher": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Band+Skull+Crusher+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Band+Skull+Crusher+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Band Skull Crusher Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "benchdips": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Dips+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Dips+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Dips Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "benchpresspowerlifting": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Press+-+Powerlifting+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Press+-+Powerlifting+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Press - Powerlifting Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "benchpresswithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Bench+Press+with+Chains+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Bench+Press+with+Chains+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Bench Press with Chains Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "boardpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Board+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Board+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Board Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "bodytriceppress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Body+Tricep+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Body+Tricep+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Body Tricep Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "bodyup": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Body-Up+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Body-Up+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Body-Up Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "cableinclinetricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Incline+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Incline+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Incline Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "cablelyingtricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Lying+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Lying+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Lying Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "cableonearmtricepextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+One+Arm+Tricep+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+One+Arm+Tricep+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable One Arm Tricep Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "cableropeoverheadtricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Cable+Rope+Overhead+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Cable+Rope+Overhead+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Cable Rope Overhead Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "chainhandleextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Chain+Handle+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Chain+Handle+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Chain Handle Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "closegripbarbellbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+Barbell+Bench+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+Barbell+Bench+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip Barbell Bench Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "closegripdumbbellpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+Dumbbell+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+Dumbbell+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip Dumbbell Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "closegripezbarpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ-Bar+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+EZ-Bar+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip EZ-Bar Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "closegrippushupoffofadumbbell": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Close-Grip+Push-Up+off+of+a+Dumbbell+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Close-Grip+Push-Up+off+of+a+Dumbbell+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Close-Grip Push-Up off of a Dumbbell Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "declineclosegripbenchtoskullcrusher": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Close-Grip+Bench+To+Skull+Crusher+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Close-Grip+Bench+To+Skull+Crusher+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Close-Grip Bench To Skull Crusher Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "declinedumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "declineezbartricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Decline+EZ+Bar+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Decline+EZ+Bar+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Decline EZ Bar Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "dipmachine": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dip+Machine+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dip+Machine+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dip Machine Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "dipstricepsversion": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dips+-+Triceps+Version+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dips+-+Triceps+Version+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dips - Triceps Version Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "dumbbellfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Floor+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Floor+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Floor Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "dumbbellonearmtricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+One-Arm+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell One-Arm Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "dumbbelltricepextensionpronatedgrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Dumbbell+Tricep+Extension+-Pronated+Grip+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Dumbbell+Tricep+Extension+-Pronated+Grip+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Dumbbell Tricep Extension -Pronated Grip Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "ezbarskullcrusher": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=EZ-Bar+Skullcrusher+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=EZ-Bar+Skullcrusher+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "EZ-Bar Skullcrusher Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "floorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Floor+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Floor+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Floor Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "floorpresswithchains": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Floor+Press+with+Chains+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Floor+Press+with+Chains+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Floor Press with Chains Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "inclinebarbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Barbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Barbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Barbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "inclinepushupclosegrip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Close-Grip+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Incline+Push-Up+Close-Grip+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Incline Push-Up Close-Grip Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "jmpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=JM+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=JM+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "JM Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "kneelingcabletricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Kneeling+Cable+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Kneeling+Cable+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Kneeling Cable Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "lowcabletricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Low+Cable+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Low+Cable+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Low Cable Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "lyingclosegripbarbelltricepsextensionbehindthehead": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Barbell+Triceps+Extension+Behind+The+Head+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Barbell+Triceps+Extension+Behind+The+Head+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Close-Grip Barbell Triceps Extension Behind The Head Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "lyingclosegripbarbelltricepspresstochin": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Barbell+Triceps+Press+To+Chin+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Close-Grip+Barbell+Triceps+Press+To+Chin+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Close-Grip Barbell Triceps Press To Chin Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "lyingdumbbelltricepextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Dumbbell+Tricep+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Dumbbell+Tricep+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Dumbbell Tricep Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "lyingtricepspress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Lying+Triceps+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Lying+Triceps+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Lying Triceps Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "machinetricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Machine+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Machine+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Machine Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "onearmfloorpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Floor+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Floor+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Floor Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "onearmpronateddumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Pronated+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Pronated+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Pronated Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "onearmsupinateddumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=One+Arm+Supinated+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=One+Arm+Supinated+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "One Arm Supinated Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "overheadtriceps": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Overhead+Triceps+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Overhead+Triceps+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Overhead Triceps Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "parallelbardip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Parallel+Bar+Dip+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Parallel+Bar+Dip+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Parallel Bar Dip Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "pinpresses": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Pin+Presses+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Pin+Presses+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Pin Presses Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "pushupsclosetricepsposition": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Push-Ups+-+Close+Triceps+Position+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Push-Ups+-+Close+Triceps+Position+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Push-Ups - Close Triceps Position Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "reversebandbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Band+Bench+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Band+Bench+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Band Bench Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "reversegriptricepspushdown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Grip+Triceps+Pushdown+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Grip+Triceps+Pushdown+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Grip Triceps Pushdown Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "reversetricepsbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Reverse+Triceps+Bench+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Reverse+Triceps+Bench+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Reverse Triceps Bench Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "ringdips": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Ring+Dips+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Ring+Dips+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Ring Dips Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "seatedbentoveronearmdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Bent-Over One-Arm Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "seatedbentovertwoarmdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+Two-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Bent-Over+Two-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Bent-Over Two-Arm Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "seatedtricepspress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Seated+Triceps+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Seated+Triceps+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Seated Triceps Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "sledoverheadtricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Sled+Overhead+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Sled+Overhead+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Sled Overhead Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "smithmachineclosegripbenchpress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Smith+Machine+Close-Grip+Bench+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Smith+Machine+Close-Grip+Bench+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Smith Machine Close-Grip Bench Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "speedbandoverheadtriceps": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Speed+Band+Overhead+Triceps+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Speed+Band+Overhead+Triceps+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Speed Band Overhead Triceps Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingbentoveronearmdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Bent-Over+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Bent-Over+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Bent-Over One-Arm Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingbentovertwoarmdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Bent-Over+Two-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Bent-Over+Two-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Bent-Over Two-Arm Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standinglowpulleyonearmtricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Low-Pulley+One-Arm+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Low-Pulley+One-Arm+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Low-Pulley One-Arm Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingonearmdumbbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+One-Arm+Dumbbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing One-Arm Dumbbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingoverheadbarbelltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Overhead+Barbell+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Overhead+Barbell+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Overhead Barbell Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "standingtoweltricepsextension": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Standing+Towel+Triceps+Extension+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Standing+Towel+Triceps+Extension+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Standing Towel Triceps Extension Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "supinechestthrow": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Supine+Chest+Throw+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Supine+Chest+Throw+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Supine Chest Throw Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tatepress": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Tate+Press+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Tate+Press+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Tate Press Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepdumbbellkickback": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Tricep+Dumbbell+Kickback+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Tricep+Dumbbell+Kickback+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Tricep Dumbbell Kickback Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepsidestretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Tricep+Side+Stretch+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Tricep+Side+Stretch+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Tricep Side Stretch Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepsoverheadextensionwithrope": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Triceps+Overhead+Extension+with+Rope+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Triceps+Overhead+Extension+with+Rope+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Triceps Overhead Extension with Rope Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepspushdown": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Triceps Pushdown Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepspushdownropeattachment": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+-+Rope+Attachment+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+-+Rope+Attachment+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Triceps Pushdown - Rope Attachment Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepspushdownvbarattachment": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+-+V-Bar+Attachment+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Triceps+Pushdown+-+V-Bar+Attachment+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Triceps Pushdown - V-Bar Attachment Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "tricepsstretch": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Triceps+Stretch+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Triceps+Stretch+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Triceps Stretch Triceps exercise tutorial",
+ "category": "Triceps"
+ },
+ "weightedbenchdip": {
+ "youtubeLink": "https://www.youtube.com/results?search_query=Weighted+Bench+Dip+Triceps+exercise+tutorial",
+ "youtubeShortsLink": "https://www.youtube.com/results?search_query=Weighted+Bench+Dip+Triceps+exercise+tutorial+shorts",
+ "youtubeSearchQuery": "Weighted Bench Dip Triceps exercise tutorial",
+ "category": "Triceps"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/onboarding_template_id.json b/app/src/main/assets/ironlog/onboarding_template_id.json
new file mode 100644
index 0000000..c753354
--- /dev/null
+++ b/app/src/main/assets/ironlog/onboarding_template_id.json
@@ -0,0 +1 @@
+"full_body_beginner_3x"
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/program_template_aliases.json b/app/src/main/assets/ironlog/program_template_aliases.json
new file mode 100644
index 0000000..1d5cfdc
--- /dev/null
+++ b/app/src/main/assets/ironlog/program_template_aliases.json
@@ -0,0 +1,4 @@
+{
+ "bodyweight_calisthenics_beginner": "bodyweight_beginner",
+ "home_db_bench_legacy": "home_dumbbell_bench_program"
+}
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/program_template_categories.json b/app/src/main/assets/ironlog/program_template_categories.json
new file mode 100644
index 0000000..7dcb862
--- /dev/null
+++ b/app/src/main/assets/ironlog/program_template_categories.json
@@ -0,0 +1,56 @@
+[
+ {
+ "id": "BEGINNER",
+ "name": "Beginner",
+ "description": "Simple foundations.",
+ "sortOrder": 100
+ },
+ {
+ "id": "STRENGTH",
+ "name": "Strength",
+ "description": "Low-rep progression.",
+ "sortOrder": 200
+ },
+ {
+ "id": "HYPERTROPHY",
+ "name": "Hypertrophy",
+ "description": "High-volume growth.",
+ "sortOrder": 300
+ },
+ {
+ "id": "AESTHETIC",
+ "name": "Aesthetic",
+ "description": "Physique-focused training.",
+ "sortOrder": 400
+ },
+ {
+ "id": "LOWER_BODY_GLUTES",
+ "name": "Lower Body / Glutes",
+ "description": "Leg emphasis.",
+ "sortOrder": 500
+ },
+ {
+ "id": "SPECIALIZATION",
+ "name": "Specialization",
+ "description": "Lagging-muscle focus.",
+ "sortOrder": 600
+ },
+ {
+ "id": "HOME_MINIMAL",
+ "name": "Home / Minimal Equipment",
+ "description": "Home-friendly plans.",
+ "sortOrder": 700
+ },
+ {
+ "id": "BODYWEIGHT_CALISTHENICS",
+ "name": "Bodyweight / Calisthenics",
+ "description": "Bodyweight-first plans.",
+ "sortOrder": 800
+ },
+ {
+ "id": "FAT_LOSS_CONDITIONING",
+ "name": "Fat Loss / Conditioning",
+ "description": "Lifting + conditioning.",
+ "sortOrder": 900
+ }
+]
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/program_templates.json b/app/src/main/assets/ironlog/program_templates.json
new file mode 100644
index 0000000..36ed2bb
--- /dev/null
+++ b/app/src/main/assets/ironlog/program_templates.json
@@ -0,0 +1,7332 @@
+[
+ {
+ "id": "full_body_beginner_3x",
+ "name": "Full Body Beginner (3x/week)",
+ "category": "BEGINNER",
+ "description": "Simple full-body progression.",
+ "goal": "Build base strength and consistency",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 3,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 110,
+ "blueprint": "FULL_BODY_BEGINNER_3",
+ "goalBias": "hypertrophy",
+ "splitType": "full_body",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "low",
+ "adherenceFloor": 45,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "FULL BODY A",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "FULL BODY B",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 2,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "FULL BODY C",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 2,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "minimalist_full_body_23",
+ "name": "Minimalist Full Body (2-3 Day)",
+ "category": "BEGINNER",
+ "description": "Time-efficient full-body essentials.",
+ "goal": "Stay consistent on a busy schedule",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 3,
+ "equipment": [
+ "Barbell",
+ "Cable",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 115,
+ "blueprint": "MINIMAL_FULL_BODY_3",
+ "goalBias": "hypertrophy",
+ "splitType": "full_body",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "low",
+ "adherenceFloor": 45,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "MINIMAL A",
+ "tag": "Efficient full body",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "MINIMAL B",
+ "tag": "Efficient full body",
+ "exercises": [
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "MINIMAL A",
+ "tag": "Efficient full body",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "upper_lower_beginner_4x",
+ "name": "Upper / Lower Beginner (4x/week)",
+ "category": "BEGINNER",
+ "description": "Balanced upper/lower split.",
+ "goal": "Learn movement patterns",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 120,
+ "blueprint": "UPPER_LOWER_4",
+ "goalBias": "hypertrophy",
+ "splitType": "upper_lower",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "bodyweight_beginner",
+ "name": "Bodyweight Beginner",
+ "category": "BEGINNER",
+ "description": "No-gym bodyweight basics.",
+ "goal": "Build movement control",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 3,
+ "equipment": [
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 130,
+ "blueprint": "BODYWEIGHT_3",
+ "goalBias": "hypertrophy",
+ "splitType": "bodyweight",
+ "minimumEquipment": "bodyweight",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "low",
+ "adherenceFloor": 45,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "CALI PUSH",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Dips",
+ "exerciseId": "dips",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Sit-Up",
+ "exerciseId": "situp",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CALI PULL",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Inverted Row",
+ "exerciseId": "inverted-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Single-Leg Romanian Deadlift",
+ "exerciseId": "single-leg-romanian-deadlift",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging_leg_raise",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CALI MIXED",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Bodyweight Squat",
+ "exerciseId": "bodyweight-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Split Squat",
+ "exerciseId": "split-squat",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Glute Bridge",
+ "exerciseId": "glute-bridge",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "upper_lower_strength_4x",
+ "name": "Upper / Lower Strength Focus (4x/week)",
+ "category": "STRENGTH",
+ "description": "Power + volume blend.",
+ "goal": "Increase compound lifts",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Cable",
+ "Machine",
+ "Bodyweight",
+ "Dumbbell"
+ ],
+ "isFeatured": true,
+ "sortOrder": 210,
+ "blueprint": "UPPER_LOWER_STRENGTH_4",
+ "goalBias": "strength",
+ "splitType": "upper_lower",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "linear_progression_with_backoff",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on compounds, RIR 2-3 on accessories",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 4,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 2,
+ "reps": 3,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "novice_barbell_strength",
+ "name": "Novice Barbell Strength",
+ "category": "STRENGTH",
+ "description": "Linear barbell progression.",
+ "goal": "Progress weekly on core lifts",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 3,
+ "equipment": [
+ "Barbell",
+ "Cable"
+ ],
+ "isFeatured": true,
+ "sortOrder": 220,
+ "blueprint": "NOVICE_BARBELL_3",
+ "goalBias": "strength",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "low",
+ "adherenceFloor": 45,
+ "specializationType": null,
+ "progressionModel": "linear_progression_with_backoff",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on compounds, RIR 2-3 on accessories",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "WORKOUT A",
+ "tag": "Linear progression",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "WORKOUT B",
+ "tag": "Linear progression",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 1,
+ "reps": 5,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "WORKOUT C",
+ "tag": "Linear progression",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Barbell Press",
+ "exerciseId": "incline-barbell-press",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "powerbuilding_4_day",
+ "name": "Powerbuilding 4-Day",
+ "category": "STRENGTH",
+ "description": "Strength first, size second.",
+ "goal": "Get stronger while building muscle",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 230,
+ "blueprint": "POWERBUILDING_4",
+ "goalBias": "strength",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "linear_progression_with_backoff",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on compounds, RIR 2-3 on accessories",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 4,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 2,
+ "reps": 3,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "PUSH B",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Incline Barbell Press",
+ "exerciseId": "incline-barbell-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS B",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "powerbuilding_5_day",
+ "name": "Powerbuilding 5-Day",
+ "category": "STRENGTH",
+ "description": "Higher-frequency powerbuilding.",
+ "goal": "Maximize progression volume",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 240,
+ "blueprint": "POWERBUILDING_5",
+ "goalBias": "strength",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "linear_progression_with_backoff",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on compounds, RIR 2-3 on accessories",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 4,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 2,
+ "reps": 3,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "PUSH A",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL B",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Back Extension",
+ "exerciseId": "back-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "LEGS B",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "pure_hypertrophy_5_day",
+ "name": "Pure Hypertrophy 5-Day",
+ "category": "HYPERTROPHY",
+ "description": "High-volume growth split.",
+ "goal": "Maximize hypertrophy",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine"
+ ],
+ "isFeatured": true,
+ "sortOrder": 310,
+ "blueprint": "HYPERTROPHY_5",
+ "goalBias": "hypertrophy",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "PUSH A",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL A",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS A",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ppl_moderate_5x",
+ "name": "Push / Pull / Legs Moderate (5x/week)",
+ "category": "HYPERTROPHY",
+ "description": "Moderate-frequency PPL.",
+ "goal": "Build muscle with recoverable volume",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 320,
+ "blueprint": "PPL_5",
+ "goalBias": "hypertrophy",
+ "splitType": "ppl",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "PUSH A",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL A",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS A",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "PUSH B",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Incline Barbell Press",
+ "exerciseId": "incline-barbell-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL B",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Back Extension",
+ "exerciseId": "back-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ppl_classic_6x",
+ "name": "Push / Pull / Legs Classic (6x/week)",
+ "category": "HYPERTROPHY",
+ "description": "Classic high-frequency PPL.",
+ "goal": "Maximum training frequency",
+ "experienceLevel": "Advanced",
+ "daysPerWeek": 6,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 330,
+ "blueprint": "PPL_6",
+ "goalBias": "hypertrophy",
+ "splitType": "ppl",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "high",
+ "adherenceFloor": 78,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_4_6_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "PUSH A",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL A",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS A",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "PUSH B",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Incline Barbell Press",
+ "exerciseId": "incline-barbell-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL B",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Back Extension",
+ "exerciseId": "back-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "LEGS B",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "bro_split_5x",
+ "name": "Bro Split (5x/week)",
+ "category": "HYPERTROPHY",
+ "description": "Single-muscle focus days.",
+ "goal": "Body-part specialization",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 340,
+ "blueprint": "BRO_SPLIT_5",
+ "goalBias": "hypertrophy",
+ "splitType": "bro_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "CHEST",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Skull Crusher",
+ "exerciseId": "skull-crusher",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "BACK",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 5,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "ARMS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "EZ-Bar Curl",
+ "exerciseId": "ez-bar-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "LEGS A",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "arnold_split_6x",
+ "name": "Arnold Split (6x/week)",
+ "category": "HYPERTROPHY",
+ "description": "Classic high-volume pairing split.",
+ "goal": "Increase upper-body density",
+ "experienceLevel": "Advanced",
+ "daysPerWeek": 6,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 350,
+ "blueprint": "ARNOLD_6",
+ "goalBias": "hypertrophy",
+ "splitType": "arnold",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "high",
+ "adherenceFloor": 78,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_4_6_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "CHEST + BACK (HEAVY)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS + ARMS (HEAVY)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Skull Crusher",
+ "exerciseId": "skull-crusher",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS (HEAVY)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "CHEST + BACK (VOLUME)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS + ARMS (VOLUME)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LEGS (VOLUME)",
+ "tag": "Arnold",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "mens_aesthetic_v_taper",
+ "name": "Men's Aesthetic V-Taper Program",
+ "category": "AESTHETIC",
+ "description": "Shoulders and lats emphasis.",
+ "goal": "Improve upper-body proportions",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 410,
+ "blueprint": "AESTHETIC_5",
+ "goalBias": "aesthetics",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 5,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "BACK",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "ARMS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "EZ-Bar Curl",
+ "exerciseId": "ez-bar-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "lean_physique_recomp",
+ "name": "Lean Physique Recomp Program",
+ "category": "AESTHETIC",
+ "description": "Lifting + conditioning recomposition.",
+ "goal": "Build muscle while cutting fat",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Conditioning",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 420,
+ "blueprint": "RECOMP_5",
+ "goalBias": "fat_loss",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "upper_body_bias_program",
+ "name": "Upper Body Bias Program",
+ "category": "AESTHETIC",
+ "description": "Upper-focused with lower maintenance.",
+ "goal": "Bring up upper body faster",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Machine",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 430,
+ "blueprint": "UPPER_BIAS_4",
+ "goalBias": "aesthetics",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "UPPER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 5,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "glute_legs_focus_45",
+ "name": "Glute & Legs Focus (4-5x/week)",
+ "category": "LOWER_BODY_GLUTES",
+ "description": "Lower-body dominant volume.",
+ "goal": "Prioritize glutes and legs",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Machine",
+ "Dumbbell",
+ "Cable"
+ ],
+ "isFeatured": true,
+ "sortOrder": 510,
+ "blueprint": "GLUTES_LEGS_5",
+ "goalBias": "hypertrophy",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "GLUTE + QUAD",
+ "tag": "Lower focus",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 2,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "GLUTE + HAM",
+ "tag": "Lower focus",
+ "exercises": [
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "GLUTE PUMP",
+ "tag": "Lower focus",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 2,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "womens_lower_body_focus",
+ "name": "Women's Lower Body Focus",
+ "category": "LOWER_BODY_GLUTES",
+ "description": "Lower-body emphasis with upper support.",
+ "goal": "Lower-body growth and strength",
+ "experienceLevel": "Beginner",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Machine",
+ "Dumbbell",
+ "Cable"
+ ],
+ "isFeatured": true,
+ "sortOrder": 520,
+ "blueprint": "LOWER_FOCUS_4",
+ "goalBias": "hypertrophy",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "LEGS B",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "athletic_legs_program",
+ "name": "Athletic Legs Program",
+ "category": "LOWER_BODY_GLUTES",
+ "description": "Power + conditioning lower split.",
+ "goal": "Athletic lower-body performance",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Barbell",
+ "Machine",
+ "Conditioning",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 530,
+ "blueprint": "ATHLETIC_LEGS_4",
+ "goalBias": "hypertrophy",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "LOWER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 4,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 2,
+ "reps": 3,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "LEGS A",
+ "tag": "Legs",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ }
+ ]
+ },
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "arm_specialization_block",
+ "name": "Arm Specialization Block",
+ "category": "SPECIALIZATION",
+ "description": "Extra direct arm volume.",
+ "goal": "Bring up biceps and triceps",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Bodyweight",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 610,
+ "blueprint": "ARM_SPECIALIZATION_5",
+ "goalBias": "specialization",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": "arms",
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 4,
+ "guardrailNotes": "Prioritize target muscle volume, keep non-target work at maintenance, then pivot after block.",
+ "days": [
+ {
+ "name": "ARMS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "EZ-Bar Curl",
+ "exerciseId": "ez-bar-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PULL B",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Back Extension",
+ "exerciseId": "back-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "ARMS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "EZ-Bar Curl",
+ "exerciseId": "ez-bar-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "chest_specialization_block",
+ "name": "Chest Specialization Block",
+ "category": "SPECIALIZATION",
+ "description": "Chest-priority frequency block.",
+ "goal": "Prioritize chest development",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Bodyweight",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 620,
+ "blueprint": "CHEST_SPECIALIZATION_5",
+ "goalBias": "specialization",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": "chest",
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 4,
+ "guardrailNotes": "Prioritize target muscle volume, keep non-target work at maintenance, then pivot after block.",
+ "days": [
+ {
+ "name": "CHEST",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Skull Crusher",
+ "exerciseId": "skull-crusher",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "CHEST",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Skull Crusher",
+ "exerciseId": "skull-crusher",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "back_width_thickness_block",
+ "name": "Back Width + Thickness Block",
+ "category": "SPECIALIZATION",
+ "description": "Dual-focus back growth block.",
+ "goal": "Increase back width and thickness",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Cable",
+ "Bodyweight",
+ "Dumbbell",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 630,
+ "blueprint": "BACK_SPECIALIZATION_5",
+ "goalBias": "specialization",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": "back",
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 4,
+ "guardrailNotes": "Prioritize target muscle volume, keep non-target work at maintenance, then pivot after block.",
+ "days": [
+ {
+ "name": "BACK",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "PULL A",
+ "tag": "Pull",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "BACK",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "ARMS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Barbell Curl",
+ "exerciseId": "barbell-curl",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "EZ-Bar Curl",
+ "exerciseId": "ez-bar-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "shoulder_specialization_block",
+ "name": "Shoulder Specialization Block",
+ "category": "SPECIALIZATION",
+ "description": "High-frequency delt block.",
+ "goal": "Build rounder shoulders",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Cable",
+ "Bodyweight",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 640,
+ "blueprint": "SHOULDER_SPECIALIZATION_5",
+ "goalBias": "specialization",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": "shoulders",
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 4,
+ "guardrailNotes": "Prioritize target muscle volume, keep non-target work at maintenance, then pivot after block.",
+ "days": [
+ {
+ "name": "SHOULDERS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 5,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "LOWER A",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Press",
+ "exerciseId": "leg-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Calf Raise",
+ "exerciseId": "calf-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "SHOULDERS",
+ "tag": "Bro split",
+ "exercises": [
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 5,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "PUSH B",
+ "tag": "Push",
+ "exercises": [
+ {
+ "name": "Incline Barbell Press",
+ "exerciseId": "incline-barbell-press",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Overhead Tricep Extension",
+ "exerciseId": "overhead-tricep-extension",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Cable Fly",
+ "exerciseId": "cable-fly",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "home_dumbbell_only_program",
+ "name": "Home Dumbbell Only Program",
+ "category": "HOME_MINIMAL",
+ "description": "No-machine home split.",
+ "goal": "Effective home training",
+ "experienceLevel": "All Levels",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Dumbbell",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 710,
+ "blueprint": "HOME_DB_ONLY_4",
+ "goalBias": "hypertrophy",
+ "splitType": "home_split",
+ "minimumEquipment": "dumbbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Only use equipment listed in the plan header.",
+ "days": [
+ {
+ "name": "HOME UPPER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Dumbbell Bench Press",
+ "exerciseId": "dumbbell-bench-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "One-Arm Dumbbell Row",
+ "exerciseId": "one-arm-dumbbell-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "HOME LOWER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Goblet Squat",
+ "exerciseId": "goblet-squat",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 60,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "HOME UPPER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Dumbbell Bench Press",
+ "exerciseId": "dumbbell-bench-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "One-Arm Dumbbell Row",
+ "exerciseId": "one-arm-dumbbell-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "HOME LOWER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Goblet Squat",
+ "exerciseId": "goblet-squat",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 60,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "home_dumbbell_bench_program",
+ "name": "Home Dumbbell + Bench Program",
+ "category": "HOME_MINIMAL",
+ "description": "Home split with bench options.",
+ "goal": "Expand home exercise variety",
+ "experienceLevel": "All Levels",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Dumbbell",
+ "Bench",
+ "Bodyweight"
+ ],
+ "isFeatured": true,
+ "sortOrder": 720,
+ "blueprint": "HOME_DB_BENCH_4",
+ "goalBias": "hypertrophy",
+ "splitType": "home_split",
+ "minimumEquipment": "dumbbell",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Only use equipment listed in the plan header.",
+ "days": [
+ {
+ "name": "HOME PUSH",
+ "tag": "Dumbbell + bench",
+ "exercises": [
+ {
+ "name": "Dumbbell Bench Press",
+ "exerciseId": "dumbbell-bench-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Dumbbell Shoulder Press",
+ "exerciseId": "dumbbell-shoulder-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "HOME LOWER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Goblet Squat",
+ "exerciseId": "goblet-squat",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 60,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "HOME PULL",
+ "tag": "Dumbbell + bench",
+ "exercises": [
+ {
+ "name": "One-Arm Dumbbell Row",
+ "exerciseId": "one-arm-dumbbell-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "One-Arm Dumbbell Row",
+ "exerciseId": "one-arm-dumbbell-row",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Curl",
+ "exerciseId": "incline-dumbbell-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Back Extension",
+ "exerciseId": "back-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "HOME LOWER",
+ "tag": "Dumbbell only",
+ "exercises": [
+ {
+ "name": "Goblet Squat",
+ "exerciseId": "goblet-squat",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Romanian Deadlift",
+ "exerciseId": "romanian-deadlift",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 60,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "resistance_band_only_program",
+ "name": "Resistance Band Only Program",
+ "category": "HOME_MINIMAL",
+ "description": "Portable resistance-band routine.",
+ "goal": "Minimal-equipment consistency",
+ "experienceLevel": "All Levels",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Resistance Band",
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 730,
+ "blueprint": "BAND_ONLY_4",
+ "goalBias": "hypertrophy",
+ "splitType": "specialized_split",
+ "minimumEquipment": "resistance_band",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Only use equipment listed in the plan header.",
+ "days": [
+ {
+ "name": "BAND UPPER",
+ "tag": "Band only",
+ "exercises": [
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Row",
+ "exerciseId": "band-row",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Curl",
+ "exerciseId": "band-curl",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ }
+ ]
+ },
+ {
+ "name": "BAND LOWER",
+ "tag": "Band only",
+ "exercises": [
+ {
+ "name": "Band Squat",
+ "exerciseId": "band-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Band Squat",
+ "exerciseId": "band-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Glute Bridge",
+ "exerciseId": "glute-bridge",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Calf Raise",
+ "exerciseId": "band-calf-raise",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Resistance Band"
+ }
+ ]
+ },
+ {
+ "name": "BAND UPPER",
+ "tag": "Band only",
+ "exercises": [
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Row",
+ "exerciseId": "band-row",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Curl",
+ "exerciseId": "band-curl",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ }
+ ]
+ },
+ {
+ "name": "BAND LOWER",
+ "tag": "Band only",
+ "exercises": [
+ {
+ "name": "Band Squat",
+ "exerciseId": "band-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Band Squat",
+ "exerciseId": "band-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Resistance Band"
+ },
+ {
+ "name": "Glute Bridge",
+ "exerciseId": "glute-bridge",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Band Calf Raise",
+ "exerciseId": "band-calf-raise",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Resistance Band"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "calisthenics_strength_base",
+ "name": "Calisthenics Strength Base",
+ "category": "BODYWEIGHT_CALISTHENICS",
+ "description": "Bodyweight strength progression.",
+ "goal": "Increase bodyweight strength",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 4,
+ "equipment": [
+ "Bodyweight"
+ ],
+ "isFeatured": false,
+ "sortOrder": 820,
+ "blueprint": "CALISTHENICS_STRENGTH_4",
+ "goalBias": "hypertrophy",
+ "splitType": "bodyweight",
+ "minimumEquipment": "bodyweight",
+ "sessionLengthTarget": 75,
+ "recoveryDemand": "moderate",
+ "adherenceFloor": 58,
+ "specializationType": null,
+ "progressionModel": "double_progression",
+ "deloadProtocol": "every_6_8_weeks_or_3_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": null,
+ "guardrailNotes": "Progress by quality reps first, then load. Deload when performance stalls.",
+ "days": [
+ {
+ "name": "CALI PUSH",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Dips",
+ "exerciseId": "dips",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Sit-Up",
+ "exerciseId": "situp",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CALI PULL",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Inverted Row",
+ "exerciseId": "inverted-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Single-Leg Romanian Deadlift",
+ "exerciseId": "single-leg-romanian-deadlift",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging_leg_raise",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CALI MIXED",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Bodyweight Squat",
+ "exerciseId": "bodyweight-squat",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Split Squat",
+ "exerciseId": "split-squat",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Glute Bridge",
+ "exerciseId": "glute-bridge",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CALI PULL",
+ "tag": "Calisthenics",
+ "exercises": [
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Inverted Row",
+ "exerciseId": "inverted-row",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Single-Leg Romanian Deadlift",
+ "exerciseId": "single-leg-romanian-deadlift",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging_leg_raise",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Push-Up",
+ "exerciseId": "push-up",
+ "sets": 4,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "fat_loss_conditioning_lifting_hybrid",
+ "name": "Fat Loss Conditioning + Lifting Hybrid",
+ "category": "FAT_LOSS_CONDITIONING",
+ "description": "Alternating lift and conditioning days.",
+ "goal": "Lose fat while preserving strength",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Conditioning",
+ "Bodyweight",
+ "Cable"
+ ],
+ "isFeatured": true,
+ "sortOrder": 910,
+ "blueprint": "FAT_LOSS_HYBRID_5",
+ "goalBias": "fat_loss",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression_conservative",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 6,
+ "guardrailNotes": "Separate hard conditioning from heavy lower sessions when possible and scale intervals by recovery.",
+ "days": [
+ {
+ "name": "FULL BODY A",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "FULL BODY B",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 2,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "interference_aware_recomp",
+ "name": "Interference-Aware Fat Loss / Recomp",
+ "category": "FAT_LOSS_CONDITIONING",
+ "description": "Recovery-aware lifting and conditioning split.",
+ "goal": "Recomp without crushing lower-body recovery",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Dumbbell",
+ "Conditioning",
+ "Bodyweight",
+ "Cable",
+ "Machine"
+ ],
+ "isFeatured": true,
+ "sortOrder": 915,
+ "blueprint": "INTERFERENCE_AWARE_RECOMP_5",
+ "goalBias": "fat_loss",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression_conservative",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 6,
+ "guardrailNotes": "Separate hard conditioning from heavy lower sessions when possible and scale intervals by recovery.",
+ "days": [
+ {
+ "name": "UPPER A",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Pull-Up",
+ "exerciseId": "pull-up",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "LOWER B",
+ "tag": "Lower split",
+ "exercises": [
+ {
+ "name": "Hack Squat",
+ "exerciseId": "hack-squat",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Leg Extension",
+ "exerciseId": "leg-extension",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 4,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "lift_3day_cardio_2day",
+ "name": "3-Day Lift + 2-Day Cardio Plan",
+ "category": "FAT_LOSS_CONDITIONING",
+ "description": "Simple split with cardio built in.",
+ "goal": "Improve body composition",
+ "experienceLevel": "All Levels",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Conditioning",
+ "Bodyweight",
+ "Cable",
+ "Dumbbell"
+ ],
+ "isFeatured": true,
+ "sortOrder": 920,
+ "blueprint": "LIFT_3_CARDIO_2",
+ "goalBias": "fat_loss",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression_conservative",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 6,
+ "guardrailNotes": "Separate hard conditioning from heavy lower sessions when possible and scale intervals by recovery.",
+ "days": [
+ {
+ "name": "FULL BODY A",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 3,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "FULL BODY B",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 8,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 2,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "FULL BODY C",
+ "tag": "Foundation",
+ "exercises": [
+ {
+ "name": "Front Squat",
+ "exerciseId": "front-squat",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Seated Cable Row",
+ "exerciseId": "seated-cable-row",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 2,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "athletic_conditioning_program",
+ "name": "Athletic Conditioning Program",
+ "category": "FAT_LOSS_CONDITIONING",
+ "description": "Athletic engine + strength emphasis.",
+ "goal": "Build work capacity and durability",
+ "experienceLevel": "Intermediate",
+ "daysPerWeek": 5,
+ "equipment": [
+ "Barbell",
+ "Conditioning",
+ "Bodyweight",
+ "Cable",
+ "Dumbbell",
+ "Machine"
+ ],
+ "isFeatured": false,
+ "sortOrder": 930,
+ "blueprint": "ATHLETIC_CONDITIONING_5",
+ "goalBias": "fat_loss",
+ "splitType": "specialized_split",
+ "minimumEquipment": "barbell",
+ "sessionLengthTarget": 90,
+ "recoveryDemand": "moderate_high",
+ "adherenceFloor": 68,
+ "specializationType": null,
+ "progressionModel": "double_progression_conservative",
+ "deloadProtocol": "every_5_7_weeks_or_2_consecutive_underperformances",
+ "effortTarget": "RIR 1-3 on working sets, avoid failure on compounds",
+ "blockDurationWeeks": 6,
+ "guardrailNotes": "Separate hard conditioning from heavy lower sessions when possible and scale intervals by recovery.",
+ "days": [
+ {
+ "name": "UPPER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Bench Press",
+ "exerciseId": "barbell-bench-press",
+ "sets": 4,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Weighted Pull-Up",
+ "exerciseId": "weighted-pull-up",
+ "sets": 4,
+ "reps": 6,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Overhead Press",
+ "exerciseId": "overhead-press",
+ "sets": 3,
+ "reps": 5,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Barbell Row",
+ "exerciseId": "barbell-row",
+ "sets": 3,
+ "reps": 6,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ },
+ {
+ "name": "LOWER POWER",
+ "tag": "Strength",
+ "exercises": [
+ {
+ "name": "Barbell Squat",
+ "exerciseId": "barbell-squat",
+ "sets": 4,
+ "reps": 4,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Deadlift",
+ "exerciseId": "deadlift",
+ "sets": 2,
+ "reps": 3,
+ "equipment": "Barbell"
+ },
+ {
+ "name": "Leg Curl",
+ "exerciseId": "leg-curl",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Standing Calf Raise",
+ "exerciseId": "standing-calf-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Machine"
+ },
+ {
+ "name": "Walking Lunge",
+ "exerciseId": "walking-lunge",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Hip Thrust",
+ "exerciseId": "hip-thrust",
+ "sets": 3,
+ "reps": 10,
+ "equipment": "Barbell"
+ }
+ ]
+ },
+ {
+ "name": "UPPER B",
+ "tag": "Upper split",
+ "exercises": [
+ {
+ "name": "Incline Dumbbell Press",
+ "exerciseId": "incline-dumbbell-press",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Lat Pulldown",
+ "exerciseId": "lat-pulldown",
+ "sets": 4,
+ "reps": 10,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Lateral Raise",
+ "exerciseId": "lateral-raise",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Face Pull",
+ "exerciseId": "face-pull",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Cable"
+ },
+ {
+ "name": "Hammer Curl",
+ "exerciseId": "hammer-curl",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Dumbbell"
+ },
+ {
+ "name": "Tricep Pushdown",
+ "exerciseId": "tricep-pushdown",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Cable"
+ }
+ ]
+ },
+ {
+ "name": "CONDITIONING",
+ "tag": "Engine",
+ "exercises": [
+ {
+ "name": "Air Bike",
+ "exerciseId": "air_bike",
+ "sets": 6,
+ "reps": 20,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Reverse Crunch",
+ "exerciseId": "reverse_crunch",
+ "sets": 3,
+ "reps": 15,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Plank",
+ "exerciseId": "plank",
+ "sets": 4,
+ "reps": 45,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Running",
+ "exerciseId": "running",
+ "sets": 4,
+ "reps": 400,
+ "equipment": "Conditioning"
+ },
+ {
+ "name": "Spider Crawl",
+ "exerciseId": "spider_crawl",
+ "sets": 4,
+ "reps": 20,
+ "equipment": "Bodyweight"
+ },
+ {
+ "name": "Hanging Leg Raise",
+ "exerciseId": "hanging-leg-raise",
+ "sets": 3,
+ "reps": 12,
+ "equipment": "Bodyweight"
+ }
+ ]
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/app/src/main/assets/ironlog/volume_comparison_dataset.json b/app/src/main/assets/ironlog/volume_comparison_dataset.json
new file mode 100644
index 0000000..c491552
--- /dev/null
+++ b/app/src/main/assets/ironlog/volume_comparison_dataset.json
@@ -0,0 +1,522 @@
+[
+ {
+ "name": "Dumbbell (heavy pair)",
+ "weightKg": 40,
+ "category": "objects"
+ },
+ {
+ "name": "Barbell",
+ "weightKg": 20,
+ "category": "objects"
+ },
+ {
+ "name": "Gym bench",
+ "weightKg": 35,
+ "category": "objects"
+ },
+ {
+ "name": "Washing machine",
+ "weightKg": 65,
+ "category": "objects"
+ },
+ {
+ "name": "Dishwasher",
+ "weightKg": 50,
+ "category": "objects"
+ },
+ {
+ "name": "Office chair",
+ "weightKg": 15,
+ "category": "objects"
+ },
+ {
+ "name": "Gaming PC",
+ "weightKg": 10,
+ "category": "objects"
+ },
+ {
+ "name": "Backpack (loaded)",
+ "weightKg": 12,
+ "category": "objects"
+ },
+ {
+ "name": "Suitcase (full)",
+ "weightKg": 25,
+ "category": "objects"
+ },
+ {
+ "name": "Microwave",
+ "weightKg": 19,
+ "category": "objects"
+ },
+ {
+ "name": "Vacuum cleaner",
+ "weightKg": 13,
+ "category": "objects"
+ },
+ {
+ "name": "Electric guitar",
+ "weightKg": 5,
+ "category": "objects"
+ },
+ {
+ "name": "Dog (medium)",
+ "weightKg": 20,
+ "category": "animals"
+ },
+ {
+ "name": "Child (5-7 yrs)",
+ "weightKg": 20,
+ "category": "objects"
+ },
+ {
+ "name": "Adult human",
+ "weightKg": 70,
+ "category": "objects"
+ },
+ {
+ "name": "Bicycle",
+ "weightKg": 12,
+ "category": "objects"
+ },
+ {
+ "name": "Road bike",
+ "weightKg": 8,
+ "category": "objects"
+ },
+ {
+ "name": "Mattress",
+ "weightKg": 30,
+ "category": "objects"
+ },
+ {
+ "name": "Sofa (2-seater)",
+ "weightKg": 45,
+ "category": "objects"
+ },
+ {
+ "name": "Refrigerator",
+ "weightKg": 100,
+ "category": "objects"
+ },
+ {
+ "name": "Vending machine",
+ "weightKg": 300,
+ "category": "objects"
+ },
+ {
+ "name": "Motorcycle",
+ "weightKg": 180,
+ "category": "vehicles"
+ },
+ {
+ "name": "Horse",
+ "weightKg": 500,
+ "category": "animals"
+ },
+ {
+ "name": "Cow",
+ "weightKg": 700,
+ "category": "animals"
+ },
+ {
+ "name": "Small piano (upright)",
+ "weightKg": 300,
+ "category": "objects"
+ },
+ {
+ "name": "Grand piano",
+ "weightKg": 500,
+ "category": "objects"
+ },
+ {
+ "name": "Smart car",
+ "weightKg": 900,
+ "category": "vehicles"
+ },
+ {
+ "name": "Golf cart",
+ "weightKg": 400,
+ "category": "vehicles"
+ },
+ {
+ "name": "Industrial fridge",
+ "weightKg": 250,
+ "category": "industrial"
+ },
+ {
+ "name": "Jet ski",
+ "weightKg": 350,
+ "category": "vehicles"
+ },
+ {
+ "name": "ATV",
+ "weightKg": 300,
+ "category": "vehicles"
+ },
+ {
+ "name": "Large safe",
+ "weightKg": 400,
+ "category": "industrial"
+ },
+ {
+ "name": "Industrial generator",
+ "weightKg": 600,
+ "category": "industrial"
+ },
+ {
+ "name": "Bear (adult)",
+ "weightKg": 300,
+ "category": "animals"
+ },
+ {
+ "name": "Lion",
+ "weightKg": 190,
+ "category": "animals"
+ },
+ {
+ "name": "Tiger",
+ "weightKg": 220,
+ "category": "animals"
+ },
+ {
+ "name": "Server rack",
+ "weightKg": 250,
+ "category": "industrial"
+ },
+ {
+ "name": "Concrete slab (1m3 section)",
+ "weightKg": 500,
+ "category": "industrial"
+ },
+ {
+ "name": "Brick pallet",
+ "weightKg": 800,
+ "category": "industrial"
+ },
+ {
+ "name": "Large desk setup",
+ "weightKg": 120,
+ "category": "objects"
+ },
+ {
+ "name": "Small car",
+ "weightKg": 1300,
+ "category": "vehicles"
+ },
+ {
+ "name": "Sedan",
+ "weightKg": 1500,
+ "category": "vehicles"
+ },
+ {
+ "name": "SUV",
+ "weightKg": 2000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Pickup truck",
+ "weightKg": 2500,
+ "category": "vehicles"
+ },
+ {
+ "name": "Van",
+ "weightKg": 3000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Elephant (small)",
+ "weightKg": 3000,
+ "category": "animals"
+ },
+ {
+ "name": "Elephant (average)",
+ "weightKg": 5000,
+ "category": "animals"
+ },
+ {
+ "name": "Rhino",
+ "weightKg": 2300,
+ "category": "animals"
+ },
+ {
+ "name": "Hippopotamus",
+ "weightKg": 3000,
+ "category": "animals"
+ },
+ {
+ "name": "Small boat",
+ "weightKg": 2000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Forklift",
+ "weightKg": 3000,
+ "category": "industrial"
+ },
+ {
+ "name": "Shipping pallet load",
+ "weightKg": 1500,
+ "category": "industrial"
+ },
+ {
+ "name": "Tractor",
+ "weightKg": 4000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Large tree trunk",
+ "weightKg": 2000,
+ "category": "industrial"
+ },
+ {
+ "name": "Mini excavator",
+ "weightKg": 3500,
+ "category": "industrial"
+ },
+ {
+ "name": "Light aircraft",
+ "weightKg": 3000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Food truck",
+ "weightKg": 3500,
+ "category": "vehicles"
+ },
+ {
+ "name": "Ice cream truck",
+ "weightKg": 3000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Horse trailer",
+ "weightKg": 2000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Delivery truck (empty)",
+ "weightKg": 4000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Bus",
+ "weightKg": 8000,
+ "category": "vehicles"
+ },
+ {
+ "name": "City bus",
+ "weightKg": 12000,
+ "category": "vehicles"
+ },
+ {
+ "name": "School bus",
+ "weightKg": 8000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Fire truck",
+ "weightKg": 14000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Garbage truck",
+ "weightKg": 16000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Semi truck (no trailer)",
+ "weightKg": 7000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Bulldozer",
+ "weightKg": 10000,
+ "category": "industrial"
+ },
+ {
+ "name": "Tank",
+ "weightKg": 60000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Train carriage",
+ "weightKg": 30000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Large excavator",
+ "weightKg": 20000,
+ "category": "industrial"
+ },
+ {
+ "name": "Blue whale",
+ "weightKg": 100000,
+ "category": "animals"
+ },
+ {
+ "name": "African elephant (large)",
+ "weightKg": 6000,
+ "category": "animals"
+ },
+ {
+ "name": "Loaded shipping container",
+ "weightKg": 20000,
+ "category": "industrial"
+ },
+ {
+ "name": "Yacht (small luxury)",
+ "weightKg": 15000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Concrete mixer truck",
+ "weightKg": 12000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Mobile crane",
+ "weightKg": 18000,
+ "category": "industrial"
+ },
+ {
+ "name": "Wind turbine blade",
+ "weightKg": 12000,
+ "category": "industrial"
+ },
+ {
+ "name": "Large statue",
+ "weightKg": 10000,
+ "category": "industrial"
+ },
+ {
+ "name": "Steel beam bundle",
+ "weightKg": 8000,
+ "category": "industrial"
+ },
+ {
+ "name": "Industrial press machine",
+ "weightKg": 15000,
+ "category": "industrial"
+ },
+ {
+ "name": "Boeing 737",
+ "weightKg": 40000,
+ "category": "vehicles"
+ },
+ {
+ "name": "Boeing 747",
+ "weightKg": 180000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Cargo ship (small)",
+ "weightKg": 5000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Blue whale (large)",
+ "weightKg": 150000,
+ "category": "animals",
+ "extreme": true
+ },
+ {
+ "name": "Space shuttle",
+ "weightKg": 2000000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Eiffel Tower (partial structure)",
+ "weightKg": 7300000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Oil tanker",
+ "weightKg": 300000000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Cruise ship",
+ "weightKg": 100000000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Locomotive engine",
+ "weightKg": 200000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Rocket (Falcon 9)",
+ "weightKg": 550000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Saturn V rocket",
+ "weightKg": 3000000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Aircraft carrier",
+ "weightKg": 100000000,
+ "category": "vehicles",
+ "extreme": true
+ },
+ {
+ "name": "Stadium structure",
+ "weightKg": 50000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Skyscraper section",
+ "weightKg": 10000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Offshore oil rig",
+ "weightKg": 50000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Suspension bridge section",
+ "weightKg": 20000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Mountain (small mass estimate segment)",
+ "weightKg": 1000000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Iceberg (small)",
+ "weightKg": 10000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Glacier section",
+ "weightKg": 1000000000,
+ "category": "industrial",
+ "extreme": true
+ },
+ {
+ "name": "Planet-scale (Earth chunk metaphor)",
+ "weightKg": 0,
+ "category": "industrial",
+ "extreme": true,
+ "disabled": true
+ }
+]
\ No newline at end of file
diff --git a/app/src/main/java/com/ironlog/app/HealthConnectRationaleActivity.kt b/app/src/main/java/com/ironlog/app/HealthConnectRationaleActivity.kt
new file mode 100644
index 0000000..8a5378b
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/HealthConnectRationaleActivity.kt
@@ -0,0 +1,65 @@
+package com.ironlog.app
+
+import android.app.Activity
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
+import android.os.Bundle
+import android.view.Gravity
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.LinearLayout
+import android.widget.TextView
+
+class HealthConnectRationaleActivity : Activity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val density = resources.displayMetrics.density
+ fun dp(value: Int): Int = (value * density).toInt()
+
+ val root = LinearLayout(this).apply {
+ orientation = LinearLayout.VERTICAL
+ gravity = Gravity.CENTER_VERTICAL
+ setPadding(dp(28), dp(28), dp(28), dp(28))
+ setBackgroundColor(Color.rgb(14, 14, 14))
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ )
+ }
+
+ val title = TextView(this).apply {
+ text = "Ironlog + Health Connect"
+ setTextColor(Color.WHITE)
+ textSize = 28f
+ typeface = android.graphics.Typeface.DEFAULT_BOLD
+ }
+
+ val body = TextView(this).apply {
+ text = "Ironlog uses Health Connect only to improve recovery, readiness, body-weight sync, and workout history sync. Your data stays under Android Health Connect permission controls, and you can revoke access at any time."
+ setTextColor(Color.rgb(190, 190, 190))
+ textSize = 17f
+ setLineSpacing(dp(4).toFloat(), 1f)
+ setPadding(0, dp(18), 0, dp(26))
+ }
+
+ val privacy = Button(this).apply {
+ text = "Open Privacy Policy"
+ setOnClickListener {
+ startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://ironlogpro.app/privacy")))
+ }
+ }
+
+ val done = Button(this).apply {
+ text = "Done"
+ setOnClickListener { finish() }
+ }
+
+ root.addView(title)
+ root.addView(body)
+ root.addView(privacy)
+ root.addView(done)
+ setContentView(root)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/IronLogApplication.kt b/app/src/main/java/com/ironlog/app/IronLogApplication.kt
new file mode 100644
index 0000000..ccded27
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/IronLogApplication.kt
@@ -0,0 +1,58 @@
+package com.ironlog.app
+
+import android.app.Application
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.WorkoutImportProvenanceMigration
+import com.ironlog.app.data.repository.SettingsRepository
+import com.ironlog.app.services.BackupScheduler
+import com.ironlog.app.services.ReminderScheduler
+import com.ironlog.app.widget.WidgetUpdateWorker
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.launch
+import timber.log.Timber
+
+class IronLogApplication : Application() {
+ private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
+
+ override fun onCreate() {
+ super.onCreate()
+ if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
+ ObjectBox.init(this)
+ appScope.launch {
+ WorkoutImportProvenanceMigration.run()
+ WidgetUpdateWorker.enqueuePeriodic(this@IronLogApplication)
+ }
+ scheduleAutoBackupIfEnabled()
+ }
+
+ private fun scheduleAutoBackupIfEnabled() {
+ appScope.launch {
+ runCatching {
+ val repo = SettingsRepository()
+ val autoBackupEnabled = repo.getBoolean("auto_backup_enabled", false)
+ if (autoBackupEnabled) {
+ val hour = repo.getString("auto_backup_hour")?.toIntOrNull() ?: 3
+ val minute = repo.getString("auto_backup_minute")?.toIntOrNull() ?: 0
+ BackupScheduler.scheduleDaily(this@IronLogApplication, hour, minute)
+ }
+ val notificationsEnabled = repo.getBoolean("notifications_enabled", false)
+ if (notificationsEnabled) {
+ val reminderMinutes = repo.getSettingNumber("dailyReminderTimeMinutes")
+ ?.toInt()
+ ?.takeIf { it in 0 until 24 * 60 }
+ ?: (8 * 60)
+ ReminderScheduler.scheduleDailyReminder(
+ this@IronLogApplication,
+ reminderMinutes / 60,
+ reminderMinutes % 60,
+ )
+ } else {
+ ReminderScheduler.cancelDailyReminder(this@IronLogApplication)
+ }
+ }
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/ironlog/app/MainActivity.kt b/app/src/main/java/com/ironlog/app/MainActivity.kt
new file mode 100644
index 0000000..233daf6
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/MainActivity.kt
@@ -0,0 +1,139 @@
+package com.ironlog.app
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.os.Build.VERSION.SDK_INT
+import android.os.Build
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.SystemBarStyle
+import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.lifecycleScope
+import com.ironlog.app.data.repository.SettingsRepository
+import com.ironlog.app.services.NotificationActionRouter
+import com.ironlog.app.services.PendingWorkoutNotificationBridge
+import com.ironlog.app.ui.IronLogApp
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Native Android entry point equivalent to index.js + App.js.
+ * React Native's AppRegistry is replaced by Activity startup, and the headless
+ * Notifee task is represented by NotificationActionReceiver/BackupWorker stubs.
+ */
+class MainActivity : ComponentActivity() {
+
+ // Android 13+ requires runtime POST_NOTIFICATIONS approval
+ private val requestNotifPermission =
+ registerForActivityResult(ActivityResultContracts.RequestPermission()) { /* granted or denied — UX continues either way */ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ // Force fully transparent nav bar on ALL navigation modes (gesture AND 3-button).
+ // The default SystemBarStyle.auto() applies a translucent scrim on 3-button nav —
+ // that scrim is the "chin." dark(transparent) skips it entirely.
+ enableEdgeToEdge(
+ statusBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT),
+ navigationBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT),
+ )
+ super.onCreate(savedInstanceState)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ window.isNavigationBarContrastEnforced = false
+ }
+ requestMaxRefreshRate()
+ handleIntentRouting(intent)
+ setContent { IronLogApp() }
+
+ // Request notification permission on first launch (Android 13+)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
+ != PackageManager.PERMISSION_GRANTED
+ ) {
+ requestNotifPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
+ }
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ lifecycleScope.launch {
+ val pending = PendingWorkoutNotificationBridge.consumePendingAction(this@MainActivity)
+ if (pending?.actionId != null) {
+ NotificationActionRouter.handleNotificationAction(
+ actionId = pending.actionId,
+ payload = pending,
+ isForeground = true,
+ )
+ }
+ }
+ }
+
+ override fun onNewIntent(intent: android.content.Intent) {
+ super.onNewIntent(intent)
+ setIntent(intent)
+ handleIntentRouting(intent)
+ }
+
+ private fun handleIntentRouting(intent: android.content.Intent?) {
+ val explicitRoute = intent?.getStringExtra("ironlog_route").orEmpty()
+ val workoutAction = intent?.getStringExtra("actionId").orEmpty()
+ val navigateToWorkout = intent?.getBooleanExtra("navigate_to_workout", false) == true
+ lifecycleScope.launch(Dispatchers.IO) {
+ val repo = SettingsRepository()
+ if (workoutAction in setOf(
+ NotificationActionRouter.Actions.SKIP_REST,
+ NotificationActionRouter.Actions.ADD_30S,
+ NotificationActionRouter.Actions.FINISH_WORKOUT,
+ )
+ ) {
+ repo.setString("pending_workout_action", workoutAction)
+ }
+ val route = when {
+ explicitRoute.isNotBlank() -> explicitRoute
+ workoutAction.isNotBlank() -> {
+ val dayId = repo.getString("active_workout_day_id").orEmpty()
+ if (dayId.isNotBlank()) "ActiveWorkout/${Uri.encode(dayId)}" else "ActiveWorkout"
+ }
+ navigateToWorkout -> {
+ val dayId = repo.getString("active_workout_day_id").orEmpty()
+ if (dayId.isNotBlank()) "ActiveWorkout/${Uri.encode(dayId)}" else "ActiveWorkout"
+ }
+ else -> ""
+ }
+ if (route.isNotBlank()) repo.setString("pending_nav_route", route)
+ }
+ }
+
+ /**
+ * Requests the highest refresh rate/mode available on the current display so
+ * all Compose content and interactions can run at the panel's maximum Hz.
+ */
+ private fun requestMaxRefreshRate() {
+ val display = if (SDK_INT >= Build.VERSION_CODES.R) {
+ this.display
+ } else {
+ @Suppress("DEPRECATION")
+ windowManager.defaultDisplay
+ } ?: return
+
+ val maxMode = display.supportedModes.maxByOrNull { it.refreshRate } ?: return
+
+ // Prefer the physical display mode with highest refresh rate (API 23+).
+ if (SDK_INT >= Build.VERSION_CODES.M) {
+ val attrs = window.attributes
+ attrs.preferredDisplayModeId = maxMode.modeId
+ attrs.preferredRefreshRate = maxMode.refreshRate
+ window.attributes = attrs
+ } else {
+ @Suppress("DEPRECATION")
+ window.attributes = window.attributes.apply {
+ preferredRefreshRate = maxMode.refreshRate
+ }
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/assets/ForgeFoxAssets.kt b/app/src/main/java/com/ironlog/app/assets/ForgeFoxAssets.kt
new file mode 100644
index 0000000..e9e6c0b
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/assets/ForgeFoxAssets.kt
@@ -0,0 +1,240 @@
+package com.ironlog.app.assets
+
+import androidx.annotation.DrawableRes
+import com.ironlog.app.R
+
+enum class ForgeFoxExpression(
+ val id: String,
+ val displayName: String,
+ val category: String,
+ @DrawableRes val drawableRes: Int
+) {
+ Neutral(
+ id = "forgefox_01_neutral",
+ displayName = "Neutral",
+ category = "core",
+ drawableRes = R.drawable.forgefox_01_neutral
+ ),
+
+ Smile(
+ id = "forgefox_02_smile",
+ displayName = "Smile",
+ category = "core",
+ drawableRes = R.drawable.forgefox_02_smile
+ ),
+
+ BigHappy(
+ id = "forgefox_03_big_happy",
+ displayName = "Big Happy",
+ category = "emotion",
+ drawableRes = R.drawable.forgefox_03_big_happy
+ ),
+
+ Excited(
+ id = "forgefox_04_excited",
+ displayName = "Excited",
+ category = "emotion",
+ drawableRes = R.drawable.forgefox_04_excited
+ ),
+
+ Laughing(
+ id = "forgefox_05_laughing",
+ displayName = "Laughing",
+ category = "emotion",
+ drawableRes = R.drawable.forgefox_05_laughing
+ ),
+
+ WinkTeasing(
+ id = "forgefox_06_wink_teasing",
+ displayName = "Wink / Teasing",
+ category = "emotion",
+ drawableRes = R.drawable.forgefox_06_wink_teasing
+ ),
+
+ Determined(
+ id = "forgefox_07_determined",
+ displayName = "Determined",
+ category = "fitness",
+ drawableRes = R.drawable.forgefox_07_determined
+ ),
+
+ Serious(
+ id = "forgefox_08_serious",
+ displayName = "Serious",
+ category = "fitness",
+ drawableRes = R.drawable.forgefox_08_serious
+ ),
+
+ AngryCoach(
+ id = "forgefox_09_angry_coach",
+ displayName = "Angry Coach",
+ category = "warning",
+ drawableRes = R.drawable.forgefox_09_angry_coach
+ ),
+
+ Disappointed(
+ id = "forgefox_10_disappointed",
+ displayName = "Disappointed",
+ category = "warning",
+ drawableRes = R.drawable.forgefox_10_disappointed
+ ),
+
+ Sad(
+ id = "forgefox_11_sad",
+ displayName = "Sad",
+ category = "emotion",
+ drawableRes = R.drawable.forgefox_11_sad
+ ),
+
+ Exhausted(
+ id = "forgefox_12_exhausted",
+ displayName = "Exhausted",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_12_exhausted
+ ),
+
+ Sleepy(
+ id = "forgefox_13_sleepy",
+ displayName = "Sleepy",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_13_sleepy
+ ),
+
+ Shocked(
+ id = "forgefox_14_shocked",
+ displayName = "Shocked",
+ category = "warning",
+ drawableRes = R.drawable.forgefox_14_shocked
+ ),
+
+ Confused(
+ id = "forgefox_15_confused",
+ displayName = "Confused",
+ category = "warning",
+ drawableRes = R.drawable.forgefox_15_confused
+ ),
+
+ Proud(
+ id = "forgefox_16_proud",
+ displayName = "Proud",
+ category = "reward",
+ drawableRes = R.drawable.forgefox_16_proud
+ ),
+
+ Flexing(
+ id = "forgefox_17_flexing",
+ displayName = "Flexing",
+ category = "fitness",
+ drawableRes = R.drawable.forgefox_17_flexing
+ ),
+
+ FistPump(
+ id = "forgefox_18_fist_pump",
+ displayName = "Fist Pump",
+ category = "reward",
+ drawableRes = R.drawable.forgefox_18_fist_pump
+ ),
+
+ PointingForward(
+ id = "forgefox_19_pointing_forward",
+ displayName = "Pointing Forward",
+ category = "widget",
+ drawableRes = R.drawable.forgefox_19_pointing_forward
+ ),
+
+ Clipboard(
+ id = "forgefox_20_clipboard",
+ displayName = "Clipboard",
+ category = "widget",
+ drawableRes = R.drawable.forgefox_20_clipboard
+ ),
+
+ WaterBottle(
+ id = "forgefox_21_water_bottle",
+ displayName = "Water Bottle",
+ category = "widget",
+ drawableRes = R.drawable.forgefox_21_water_bottle
+ ),
+
+ Dumbbell(
+ id = "forgefox_22_dumbbell",
+ displayName = "Dumbbell",
+ category = "fitness",
+ drawableRes = R.drawable.forgefox_22_dumbbell
+ ),
+
+ PullUp(
+ id = "forgefox_23_pull_up",
+ displayName = "Pull Up",
+ category = "fitness",
+ drawableRes = R.drawable.forgefox_23_pull_up
+ ),
+
+ TiredTowel(
+ id = "forgefox_24_tired_towel",
+ displayName = "Tired Towel",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_24_tired_towel
+ ),
+
+ TrophyMedal(
+ id = "forgefox_25_trophy_medal",
+ displayName = "Trophy Medal",
+ category = "reward",
+ drawableRes = R.drawable.forgefox_25_trophy_medal
+ ),
+
+ StreakFire(
+ id = "forgefox_26_streak_fire",
+ displayName = "Streak Fire",
+ category = "reward",
+ drawableRes = R.drawable.forgefox_26_streak_fire
+ ),
+
+ RepairStreak(
+ id = "forgefox_27_repair_streak",
+ displayName = "Repair Streak",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_27_repair_streak
+ ),
+
+ RestBlanket(
+ id = "forgefox_28_rest_blanket",
+ displayName = "Rest Blanket",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_28_rest_blanket
+ ),
+
+ CheckingWatch(
+ id = "forgefox_29_checking_watch",
+ displayName = "Checking Watch",
+ category = "warning",
+ drawableRes = R.drawable.forgefox_29_checking_watch
+ ),
+
+ CoachArmsCrossed(
+ id = "forgefox_30_coach_arms_crossed",
+ displayName = "Coach Arms Crossed",
+ category = "widget",
+ drawableRes = R.drawable.forgefox_30_coach_arms_crossed
+ ),
+
+ SupportiveFailure(
+ id = "forgefox_31_supportive_failure",
+ displayName = "Supportive Failure",
+ category = "recovery",
+ drawableRes = R.drawable.forgefox_31_supportive_failure
+ ),
+
+ LevelUp(
+ id = "forgefox_32_level_up",
+ displayName = "Level Up",
+ category = "reward",
+ drawableRes = R.drawable.forgefox_32_level_up
+ );
+
+ companion object {
+ fun fromId(id: String): ForgeFoxExpression =
+ entries.firstOrNull { it.id == id } ?: Neutral
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/health/BiometricSnapshot.kt b/app/src/main/java/com/ironlog/app/data/health/BiometricSnapshot.kt
new file mode 100644
index 0000000..f3984c2
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/health/BiometricSnapshot.kt
@@ -0,0 +1,18 @@
+// app/src/main/java/com/ironlog/app/data/health/BiometricSnapshot.kt
+package com.ironlog.app.data.health
+
+/**
+ * Latest biometric data read from Health Connect.
+ * All values are nullable — null means no recent data available.
+ *
+ * @param sleepHours Total sleep hours from last night (Health Connect SleepSessionRecord).
+ * @param restingHrBpm Resting heart rate in bpm (Health Connect RestingHeartRateRecord).
+ * @param hrvRmssd Heart Rate Variability RMSSD in ms (Health Connect HRVRecord).
+ * @param weightKg Latest body weight in kg (Health Connect WeightRecord).
+ */
+data class BiometricSnapshot(
+ val sleepHours: Double? = null,
+ val restingHrBpm: Long? = null,
+ val hrvRmssd: Double? = null,
+ val weightKg: Double? = null,
+)
diff --git a/app/src/main/java/com/ironlog/app/data/health/HealthConnectRepository.kt b/app/src/main/java/com/ironlog/app/data/health/HealthConnectRepository.kt
new file mode 100644
index 0000000..f8a2452
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/health/HealthConnectRepository.kt
@@ -0,0 +1,156 @@
+// app/src/main/java/com/ironlog/app/data/health/HealthConnectRepository.kt
+package com.ironlog.app.data.health
+
+import android.content.Context
+import androidx.health.connect.client.HealthConnectClient
+import androidx.health.connect.client.permission.HealthPermission
+import androidx.health.connect.client.records.ExerciseSessionRecord
+import androidx.health.connect.client.records.HeartRateVariabilityRmssdRecord
+import androidx.health.connect.client.records.RestingHeartRateRecord
+import androidx.health.connect.client.records.SleepSessionRecord
+import androidx.health.connect.client.records.WeightRecord
+import androidx.health.connect.client.records.metadata.Metadata
+import androidx.health.connect.client.request.ReadRecordsRequest
+import androidx.health.connect.client.time.TimeRangeFilter
+import androidx.health.connect.client.units.Mass
+import com.ironlog.app.ui.model.HistoryEntry
+import timber.log.Timber
+import java.time.Duration
+import java.time.Instant
+import java.time.LocalDate
+import java.time.ZoneId
+
+/**
+ * Wraps the Health Connect client for IronLog read/write operations.
+ *
+ * All public methods are suspend functions and must be called from a coroutine.
+ * Callers should check [isAvailable] before calling any other method.
+ */
+class HealthConnectRepository(private val context: Context) {
+
+ private val client: HealthConnectClient? by lazy {
+ runCatching { HealthConnectClient.getOrCreate(context) }
+ .onFailure { Timber.e(it, "HealthConnect client init failed") }
+ .getOrNull()
+ }
+
+ /** Returns true if Health Connect is installed and available on this device. */
+ fun isAvailable(): Boolean =
+ HealthConnectClient.getSdkStatus(context) == HealthConnectClient.SDK_AVAILABLE
+
+ /** The permission set IronLog requests from Health Connect. */
+ val writePermissions: Set = setOf(
+ HealthPermission.getWritePermission(ExerciseSessionRecord::class),
+ HealthPermission.getWritePermission(WeightRecord::class),
+ )
+
+ val readPermissions: Set = setOf(
+ HealthPermission.getReadPermission(SleepSessionRecord::class),
+ HealthPermission.getReadPermission(RestingHeartRateRecord::class),
+ HealthPermission.getReadPermission(HeartRateVariabilityRmssdRecord::class),
+ )
+
+ val requiredPermissions: Set = writePermissions + readPermissions
+
+ /** Returns which of [requiredPermissions] have been granted. */
+ suspend fun grantedPermissions(): Set {
+ val c = client ?: return emptySet()
+ return c.permissionController.getGrantedPermissions()
+ }
+
+ /** Returns true if all required permissions are granted. */
+ suspend fun hasAllPermissions(): Boolean =
+ grantedPermissions().containsAll(requiredPermissions)
+
+ // ── Write ─────────────────────────────────────────────────────────────
+
+ /**
+ * Write a completed workout session from a [HistoryEntry] to Health Connect.
+ * No-op if Health Connect is unavailable or permissions are missing.
+ */
+ suspend fun writeWorkoutSession(entry: HistoryEntry) {
+ val c = client ?: return
+ runCatching {
+ val date = LocalDate.parse(entry.date.take(10))
+ val zone = ZoneId.systemDefault()
+ val start = date.atStartOfDay(zone).toInstant()
+ val end = start.plusSeconds(entry.duration.toLong().coerceAtLeast(60))
+
+ val record = ExerciseSessionRecord(
+ startTime = start,
+ startZoneOffset = zone.rules.getOffset(start),
+ endTime = end,
+ endZoneOffset = zone.rules.getOffset(end),
+ exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_STRENGTH_TRAINING,
+ title = entry.name,
+ metadata = Metadata(),
+ )
+ c.insertRecords(listOf(record))
+ }.onFailure { Timber.e(it, "HealthConnect: writeWorkoutSession failed") }
+ }
+
+ /**
+ * Write the user's body weight to Health Connect.
+ * @param weightKg Weight in kilograms.
+ */
+ suspend fun writeWeight(weightKg: Double) {
+ val c = client ?: return
+ runCatching {
+ val now = Instant.now()
+ val zone = ZoneId.systemDefault()
+ val record = WeightRecord(
+ time = now,
+ zoneOffset = zone.rules.getOffset(now),
+ weight = Mass.kilograms(weightKg),
+ metadata = Metadata(),
+ )
+ c.insertRecords(listOf(record))
+ }.onFailure { Timber.e(it, "HealthConnect: writeWeight failed") }
+ }
+
+ // ── Read ──────────────────────────────────────────────────────────────
+
+ /**
+ * Read a [BiometricSnapshot] for the last 36 hours.
+ * Returns a snapshot with null fields where data is unavailable.
+ */
+ suspend fun readBiometricSnapshot(): BiometricSnapshot {
+ val c = client ?: return BiometricSnapshot()
+
+ val now = Instant.now()
+ val cutoff = now.minus(Duration.ofHours(36))
+ val timeRange = TimeRangeFilter.between(cutoff, now)
+
+ val sleepHours: Double? = runCatching {
+ val result = c.readRecords(
+ ReadRecordsRequest(SleepSessionRecord::class, timeRange)
+ )
+ result.records.lastOrNull()?.let { session ->
+ Duration.between(session.startTime, session.endTime).toMinutes() / 60.0
+ }
+ }.onFailure { Timber.w(it, "HealthConnect: readBiometricSnapshot sleepHours failed") }
+ .getOrNull()
+
+ val restingHr: Long? = runCatching {
+ val result = c.readRecords(
+ ReadRecordsRequest(RestingHeartRateRecord::class, timeRange)
+ )
+ result.records.lastOrNull()?.beatsPerMinute
+ }.onFailure { Timber.w(it, "HealthConnect: readBiometricSnapshot restingHr failed") }
+ .getOrNull()
+
+ val hrv: Double? = runCatching {
+ val result = c.readRecords(
+ ReadRecordsRequest(HeartRateVariabilityRmssdRecord::class, timeRange)
+ )
+ result.records.lastOrNull()?.heartRateVariabilityMillis
+ }.onFailure { Timber.w(it, "HealthConnect: readBiometricSnapshot hrv failed") }
+ .getOrNull()
+
+ return BiometricSnapshot(
+ sleepHours = sleepHours,
+ restingHrBpm = restingHr,
+ hrvRmssd = hrv,
+ )
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/model/RepositoryModels.kt b/app/src/main/java/com/ironlog/app/data/model/RepositoryModels.kt
new file mode 100644
index 0000000..c2e26b1
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/model/RepositoryModels.kt
@@ -0,0 +1,230 @@
+package com.ironlog.app.data.model
+
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.PlanDayEntity
+import com.ironlog.app.data.objectbox.PlanEntity
+import com.ironlog.app.data.objectbox.PlanExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutSetEntity
+import kotlinx.serialization.Serializable
+
+// Exercise repository
+
+data class ExerciseFilters(
+ val primaryMuscle: String? = null,
+ val equipment: String? = null,
+ val category: String? = null,
+ val customOnly: Boolean = false,
+ val limit: Int? = null,
+)
+
+data class MuscleInput(
+ val muscle: String? = null,
+ val role: String? = null,
+ val contribution_fraction: Double? = null,
+)
+
+data class CreateExerciseInput(
+ val name: String? = null,
+ val primaryMuscle: String? = null,
+ val equipment: String? = null,
+ val category: String? = null,
+ val notes: String? = null,
+ val muscles: List? = null,
+ val trackingType: String? = null,
+ val movementPattern: String? = null,
+ val difficulty: String? = null,
+ val isBodyweight: Boolean? = null,
+ val secondaryMuscles: List? = null,
+)
+
+data class UpdateExerciseInput(
+ val name: String? = null,
+ val primaryMuscle: String? = null,
+ val equipment: String? = null,
+ val category: String? = null,
+ val notes: String? = null,
+)
+
+data class LegacyExerciseShape(
+ val id: String,
+ val exerciseId: String,
+ val name: String,
+ val primaryMuscles: List,
+ val primaryMuscle: String?,
+ val secondaryMuscles: List,
+ val equipment: String,
+ val category: String,
+ val trackingType: String,
+ val isCustom: Boolean,
+ val aliases: List,
+ val isBodyweight: Boolean,
+ val movementPattern: String?,
+ val difficulty: String?,
+ val apparatus: String?,
+ val equipmentDetail: String?,
+ val sourceTags: List,
+ val notes: String,
+)
+
+// Plan repository
+
+data class PlanInput(
+ val name: String? = null,
+ val goal: String? = null,
+ val description: String? = null,
+ val isActive: Boolean? = null,
+)
+
+data class PlanDayInput(
+ val name: String? = null,
+ val color: String? = null,
+ val orderIndex: Int? = null,
+)
+
+data class PlanExerciseInput(
+ val exerciseId: String? = null,
+ val name: String? = null,
+ val orderIndex: Int? = null,
+ val sets: Int? = null,
+ val reps: String? = null,
+ val restSeconds: Int? = null,
+ val supersetGroup: String? = null,
+ val isWarmup: Boolean? = null,
+ val notes: String? = null,
+)
+
+data class PlanBundle(
+ val plan: PlanEntity,
+ val days: List,
+ val activeDayId: String?,
+)
+
+data class PlanSnapshot(
+ val plan: PlanEntity,
+ val days: List,
+ val exercises: List,
+)
+
+data class WorkoutPerformedSet(
+ val type: String? = null,
+ val reps: Double? = null,
+ val restSeconds: Int? = null,
+ val rest: Int? = null,
+ val isWarmup: Boolean? = null,
+)
+
+data class WorkoutPerformedExercise(
+ val exerciseId: String? = null,
+ val name: String? = null,
+ val sets: List? = null,
+ val prescribedReps: Any? = null,
+)
+
+data class FullPlanObject(
+ val name: String? = null,
+ val goal: String? = null,
+ val description: String? = null,
+ val days: List = emptyList(),
+)
+
+data class FullPlanDay(
+ val name: String? = null,
+ val color: String? = null,
+ val exercises: List = emptyList(),
+)
+
+// Workout repository
+
+data class SetInput(
+ val setIndex: Int? = null,
+ val weight: Double? = null,
+ val reps: Double? = null,
+ val rpe: Double? = null,
+ val rir: Double? = null,
+ val restSeconds: Int? = null,
+ val isWarmup: Boolean? = null,
+ val isDropset: Boolean? = null,
+ val isAmrap: Boolean? = null,
+ val isAMRAP: Boolean? = null,
+ val toFailure: Boolean? = null,
+ val completedAt: Long? = null,
+ val type: String? = null,
+ val rest: Int? = null,
+)
+
+data class WorkoutMetadataInput(
+ val startedAt: Long? = null,
+ val durationSeconds: Int? = null,
+ val rating: Double? = null,
+ val notes: String? = null,
+)
+
+data class CompletedExerciseInput(
+ val exerciseId: String? = null,
+ val name: String? = null,
+ val primaryMuscles: List? = null,
+ val primaryMuscle: String? = null,
+ val equipment: String? = null,
+ val category: String? = null,
+ val supersetGroup: String? = null,
+ val note: String? = null,
+ val notes: String? = null,
+ val sets: List = emptyList(),
+)
+
+data class CreateCompletedWorkoutInput(
+ val name: String? = null,
+ val startedAt: Long,
+ val durationSeconds: Int,
+ val rating: Double? = null,
+ val notes: String? = null,
+ val exerciseData: List = emptyList(),
+)
+
+data class WorkoutDetail(
+ val workout: WorkoutEntity,
+ val exercises: List,
+ val sets: List,
+ val totalVolume: Double,
+)
+
+// Stats repository
+
+data class PrRecord(
+ val exerciseId: String,
+ val exerciseName: String,
+ val exercisePrGroupId: String,
+ val weight: Double,
+ val reps: Double,
+ val estimated1RM: Double,
+)
+
+// Seed JSON DTOs
+@Serializable
+data class ExerciseSeedPayload(
+ val meta: Map = emptyMap(),
+ val exercises: List = emptyList(),
+)
+
+@Serializable
+data class ExerciseSeedEntry(
+ val id: String? = null,
+ val name: String? = null,
+ val primaryMuscle: String? = null,
+ val primaryMuscles: List? = null,
+ val secondaryMuscles: List? = null,
+ val equipment: String? = null,
+ val equipmentDetail: String? = null,
+ val apparatus: List? = null,
+ val trackingType: String? = null,
+ val category: String? = null,
+ val isBodyweight: Boolean? = null,
+ val requiresExternalLoad: Boolean? = null,
+ val movementPattern: String? = null,
+ val difficulty: String? = null,
+ val aliases: List? = null,
+ val sourceTags: List? = null,
+ val notes: String? = null,
+)
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/AthleteCalibrationEntity.kt b/app/src/main/java/com/ironlog/app/data/objectbox/AthleteCalibrationEntity.kt
new file mode 100644
index 0000000..251c9ad
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/AthleteCalibrationEntity.kt
@@ -0,0 +1,28 @@
+package com.ironlog.app.data.objectbox
+
+import io.objectbox.annotation.Entity
+import io.objectbox.annotation.Id
+import io.objectbox.annotation.Unique
+
+@Entity
+data class AthleteCalibrationEntity(
+ @Id var id: Long = 0,
+ @Unique var offlineUserId: String = "",
+ var trainingAgeMonths: Int = 0,
+ var historicalTrainingDaysPerWeek: Int = 3,
+ var firstVerifiedSessionAt: Long = 0L,
+ var weightUnit: String = "kg",
+ var bodyweightKg: Double? = null,
+ var goalMode: String = "hypertrophy",
+ var weeklyGoalDays: Int = 4,
+ var importedHistory: Boolean = false,
+ var confidence: Double = 0.5,
+ var updatedAt: Long = 0L,
+ var hasPastTraining: Boolean = false,
+ var hasGymAccess: Boolean = true,
+ var baselinePushups: Int = 0,
+ var baselinePullups: Int = 0,
+ var baselineBenchKg: Int = 0,
+ var baselineLatPulldownKg: Int = 0,
+ var baselineMileRunSeconds: Int = 0,
+)
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/Entities.kt b/app/src/main/java/com/ironlog/app/data/objectbox/Entities.kt
new file mode 100644
index 0000000..b5fbc43
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/Entities.kt
@@ -0,0 +1,246 @@
+package com.ironlog.app.data.objectbox
+
+import io.objectbox.annotation.Backlink
+import io.objectbox.annotation.Entity
+import io.objectbox.annotation.Id
+import io.objectbox.annotation.Index
+import io.objectbox.annotation.Unique
+import io.objectbox.annotation.ConflictStrategy
+import io.objectbox.relation.ToMany
+import io.objectbox.relation.ToOne
+import java.util.UUID
+
+internal fun newUid(): String = UUID.randomUUID().toString()
+
+/** ObjectBox entity: db_smoke_tests */
+@Entity
+class DbSmokeTestEntity {
+ @Id var objectBoxId: Long = 0
+ var label: String = ""
+ var createdAt: Long = 0L
+}
+
+/** ObjectBox entity: exercises */
+@Entity
+class ExerciseEntity {
+ @Id var objectBoxId: Long = 0
+
+ /** Stable string id for cross-device and export/import identity. */
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ @Index var name: String = ""
+ @Index var normalizedName: String = ""
+ @Index var primaryMuscle: String = ""
+ @Index var equipment: String = ""
+ var category: String = "strength"
+ @Index var isCustom: Boolean = false
+ var source: String = ""
+ var notes: String = ""
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+
+ /** Optional metadata present in exerciseLibrary.json but not in schema v2. */
+ var equipmentDetail: String? = null
+ var apparatusJson: String? = null
+ var trackingType: String? = null
+ var isBodyweight: Boolean = false
+ var requiresExternalLoad: Boolean = false
+ var movementPattern: String? = null
+ var difficulty: String? = null
+ var aliasesJson: String? = null
+ var sourceTagsJson: String? = null
+ var secondaryMusclesJson: String? = null
+
+ @Backlink(to = "exercise")
+ lateinit var muscles: ToMany
+}
+
+/** ObjectBox entity: exercise_muscles */
+@Entity
+class ExerciseMuscleEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.REPLACE)
+ var uid: String = newUid()
+
+ lateinit var exercise: ToOne
+ @Index var exerciseUid: String = ""
+ @Index var muscle: String = ""
+ var role: String = "secondary"
+ var contributionFraction: Double = 0.0
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+}
+
+/** ObjectBox entity: plans */
+@Entity
+class PlanEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ var name: String = ""
+ var goal: String = ""
+ var description: String = ""
+ @Index var isActive: Boolean = false
+ var createdAt: Long = 0L
+ @Index var updatedAt: Long = 0L
+
+ @Backlink(to = "plan")
+ lateinit var days: ToMany
+}
+
+/** ObjectBox entity: plan_days */
+@Entity
+class PlanDayEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ lateinit var plan: ToOne
+ @Index var planUid: String = ""
+ var name: String = ""
+ var color: String = "#FF4500"
+ @Index var orderIndex: Int = 0
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+
+ @Backlink(to = "planDay")
+ lateinit var exercises: ToMany
+}
+
+/** ObjectBox entity: plan_exercises */
+@Entity
+class PlanExerciseEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ lateinit var planDay: ToOne
+ @Index var planDayUid: String = ""
+ lateinit var exercise: ToOne
+ @Index var exerciseUid: String = ""
+ @Index var orderIndex: Int = 0
+ var sets: Int = 1
+ var reps: String = ""
+ var restSeconds: Int = 0
+ var supersetGroup: String = ""
+ var isWarmup: Boolean = false
+ var notes: String = ""
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+}
+
+/** ObjectBox entity: workouts */
+@Entity
+class WorkoutEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ lateinit var plan: ToOne
+ @Index var planUid: String? = null
+ lateinit var planDay: ToOne
+ @Index var planDayUid: String? = null
+ var name: String = ""
+ @Index var startedAt: Long = 0L
+ var completedAt: Long? = null
+ var durationSeconds: Int = 0
+ var rating: Double? = null
+ var notes: String = ""
+ @Index var status: String = "active"
+ /** True when this workout came from an external/legacy import rather than local logging. */
+ var imported: Boolean = false
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+
+ @Backlink(to = "workout")
+ lateinit var exercises: ToMany
+}
+
+/** ObjectBox entity: workout_exercises */
+@Entity
+class WorkoutExerciseEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ lateinit var workout: ToOne
+ @Index var workoutUid: String = ""
+ lateinit var exercise: ToOne
+ @Index var exerciseUid: String = ""
+ @Index var orderIndex: Int = 0
+ var supersetGroup: String = ""
+ var notes: String = ""
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+
+ @Backlink(to = "workoutExercise")
+ lateinit var sets: ToMany
+}
+
+/** ObjectBox entity: workout_sets */
+@Entity
+class WorkoutSetEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+
+ lateinit var workoutExercise: ToOne
+ @Index var workoutExerciseUid: String = ""
+ @Index var setIndex: Int = 1
+ var weight: Double = 0.0
+ var reps: Double = 0.0
+ var rpe: Double? = null
+ var rir: Double? = null
+ var restSeconds: Int = 0
+ @Index var isWarmup: Boolean = false
+ var isDropset: Boolean = false
+ var isAmrap: Boolean = false
+ var toFailure: Boolean = false
+ var completedAt: Long? = null
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+}
+
+/** ObjectBox entity: body_measurements */
+@Entity
+class BodyMeasurementEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+ @Index var measuredAt: Long = 0L
+ var bodyweight: Double? = null
+ var waist: Double? = null
+ var chest: Double? = null
+ var arm: Double? = null
+ var thigh: Double? = null
+ var notes: String = ""
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+}
+
+/** ObjectBox entity: app_settings */
+@Entity
+class AppSettingEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.REPLACE)
+ var key: String = ""
+ var value: String = ""
+ var valueType: String = "string"
+ var updatedAt: Long = 0L
+}
+
+/** ObjectBox entity: progress_photos */
+@Entity
+class ProgressPhotoEntity {
+ @Id var objectBoxId: Long = 0
+ @Unique(onConflict = ConflictStrategy.FAIL)
+ var uid: String = newUid()
+ var fileUri: String = ""
+ @Index var takenAt: Long = 0L
+ var bodyweight: Double? = null
+ var notes: String = ""
+ var createdAt: Long = 0L
+ var updatedAt: Long = 0L
+}
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/GamificationProfileEntity.kt b/app/src/main/java/com/ironlog/app/data/objectbox/GamificationProfileEntity.kt
new file mode 100644
index 0000000..bee6cfc
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/GamificationProfileEntity.kt
@@ -0,0 +1,48 @@
+// app/src/main/java/com/ironlog/app/data/entity/GamificationProfileEntity.kt
+package com.ironlog.app.data.objectbox
+
+import io.objectbox.annotation.ConflictStrategy
+import io.objectbox.annotation.Entity
+import io.objectbox.annotation.Id
+import io.objectbox.annotation.Unique
+
+@Entity
+data class GamificationProfileEntity(
+ @Id var id: Long = 0,
+
+ /** Stable user identifier (UUID string, set once on first launch). */
+ @Unique var offlineUserId: String = "",
+
+ /** Total accumulated XP across all time. */
+ var totalXp: Long = 0L,
+
+ /** Current level (1-100), derived from totalXp but cached for display. */
+ var level: Int = 1,
+
+ /** XP within the current level (0..xpForLevel(level)). */
+ var xpInLevel: Long = 0L,
+
+ /** Current Iron Ledger grade label or legacy bridge key. */
+ var rank: String = "E",
+
+ /** Active title (unlocked badge name). */
+ var activeTitle: String = "Ledger Initiate",
+
+ /** JSON-serialized RpgStats for fast display without recomputing. */
+ var statsJson: String = "{}",
+
+ /** XP earned this ISO week (for weekly leaderboard -- stored, not yet used). */
+ var weeklyXp: Int = 0,
+
+ /** ISO week key of last weeklyXp reset, e.g. "2026-W21". */
+ var weeklyXpResetWeek: String = "",
+
+ /** Current streak in qualifying weeks. */
+ var streakWeeks: Int = 0,
+
+ /** JSON map of ISO-week-key -> recovery circuit completions. Field name is legacy ObjectBox schema. */
+ var makeupCompletionsJson: String = "{}",
+
+ /** Comma-separated list of unlocked badge IDs. */
+ var unlockedBadges: String = "",
+)
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/IronLedgerEventEntity.kt b/app/src/main/java/com/ironlog/app/data/objectbox/IronLedgerEventEntity.kt
new file mode 100644
index 0000000..9ab48f3
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/IronLedgerEventEntity.kt
@@ -0,0 +1,22 @@
+package com.ironlog.app.data.objectbox
+
+import io.objectbox.annotation.Entity
+import io.objectbox.annotation.Id
+import io.objectbox.annotation.Index
+import io.objectbox.annotation.Unique
+
+@Entity
+data class IronLedgerEventEntity(
+ @Id var id: Long = 0,
+ @Unique var eventId: String = "",
+ @Index var sourceType: String = "",
+ @Index var sourceId: String = "",
+ @Index var eventKind: String = "",
+ @Index var occurredAt: Long = 0L,
+ var xpDelta: Int = 0,
+ var statDeltasJson: String = "{}",
+ var trustScore: Double = 1.0,
+ @Index var fingerprint: String = "",
+ var metadataJson: String = "{}",
+ @Index var invalidated: Boolean = false,
+)
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/ObjectBox.kt b/app/src/main/java/com/ironlog/app/data/objectbox/ObjectBox.kt
new file mode 100644
index 0000000..1a0ecc1
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/ObjectBox.kt
@@ -0,0 +1,26 @@
+package com.ironlog.app.data.objectbox
+
+import android.content.Context
+import io.objectbox.BoxStore
+
+/**
+ * ObjectBox store — singleton gateway to the on-device database.
+ * Initialised once in IronLogApplication and shared across all repositories.
+ */
+object ObjectBox {
+ lateinit var store: BoxStore
+ private set
+
+ @Synchronized
+ fun init(context: Context) {
+ if (::store.isInitialized) return
+ val appCtx = context.applicationContext
+ // Never turn an initialization failure into silent data loss. Schema migrations must
+ // preserve the stable IDs in objectbox-models/default.json; disk/corruption failures
+ // are surfaced to the caller so recovery can be explicit and backup-aware.
+ store = MyObjectBox.builder()
+ .androidContext(appCtx)
+ .name("ironlog_objectbox")
+ .build()
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/objectbox/WorkoutImportProvenanceMigration.kt b/app/src/main/java/com/ironlog/app/data/objectbox/WorkoutImportProvenanceMigration.kt
new file mode 100644
index 0000000..ff4f7d3
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/objectbox/WorkoutImportProvenanceMigration.kt
@@ -0,0 +1,110 @@
+package com.ironlog.app.data.objectbox
+
+import org.json.JSONObject
+
+/**
+ * One-time bridge from the legacy account-wide imported-history flag to per-workout
+ * provenance. Existing databases cannot identify mixed native/imported rows, so the safe
+ * migration marks the completed history present at upgrade time as imported. Workouts logged
+ * after the migration keep the entity default (`imported = false`).
+ */
+object WorkoutImportProvenanceMigration {
+ private const val MIGRATION_KEY = "workout_import_provenance_v1"
+ private const val LEGACY_IMPORTED_KEY = "ledger_imported_history"
+
+ fun run() {
+ val store = ObjectBox.store
+ normalizeAthleteSingletons()
+ val settingsBox = store.boxFor(AppSettingEntity::class.java)
+ val alreadyMigrated = settingsBox.query(AppSettingEntity_.key.equal(MIGRATION_KEY))
+ .build().use { it.findFirst() }
+ ?.value
+ ?.toBooleanStrictOrNull() == true
+ if (alreadyMigrated) return
+
+ store.runInTx {
+ val legacySetting = settingsBox.query(AppSettingEntity_.key.equal(LEGACY_IMPORTED_KEY))
+ .build().use { it.findFirst() }
+ ?.value
+ ?.toBooleanStrictOrNull() == true
+ val legacyCalibration = store.boxFor(AthleteCalibrationEntity::class.java)
+ .query(AthleteCalibrationEntity_.importedHistory.equal(true))
+ .build().use { it.count() > 0 }
+
+ if (legacySetting || legacyCalibration) {
+ val workoutBox = store.boxFor(WorkoutEntity::class.java)
+ val completed = workoutBox.query(WorkoutEntity_.status.equal("completed"))
+ .build().use { it.find() }
+ completed.forEach { it.imported = true }
+ workoutBox.put(completed)
+ }
+
+ settingsBox.put(AppSettingEntity().apply {
+ key = MIGRATION_KEY
+ value = "true"
+ valueType = "boolean"
+ updatedAt = System.currentTimeMillis()
+ })
+ }
+ }
+
+ private fun normalizeAthleteSingletons() {
+ val store = ObjectBox.store
+ store.runInTx {
+ val profileBox = store.boxFor(GamificationProfileEntity::class.java)
+ val profiles = profileBox.all
+ if (profiles.isNotEmpty() && (profiles.size > 1 || profiles.single().offlineUserId != "local")) {
+ val primary = profiles.maxBy { it.totalXp }
+ val badges = profiles.flatMap { it.unlockedBadges.split(',') }
+ .map(String::trim)
+ .filter(String::isNotEmpty)
+ .distinct()
+ val mergedCompletions = mergeCompletionMaps(profiles.map { it.makeupCompletionsJson })
+ profileBox.remove(profiles)
+ primary.id = 0
+ primary.offlineUserId = "local"
+ primary.totalXp = profiles.maxOf { it.totalXp }
+ primary.level = profiles.maxOf { it.level }
+ primary.weeklyXp = profiles.maxOf { it.weeklyXp }
+ primary.streakWeeks = profiles.maxOf { it.streakWeeks }
+ primary.unlockedBadges = badges.joinToString(",")
+ primary.makeupCompletionsJson = mergedCompletions
+ profileBox.put(primary)
+ }
+
+ val calibrationBox = store.boxFor(AthleteCalibrationEntity::class.java)
+ val calibrations = calibrationBox.all
+ if (calibrations.isNotEmpty() && (calibrations.size > 1 || calibrations.single().offlineUserId != "local")) {
+ val latest = calibrations.maxBy { it.updatedAt }
+ val nonZeroFirstSession = calibrations.map { it.firstVerifiedSessionAt }
+ .filter { it > 0L }
+ .minOrNull() ?: 0L
+ calibrationBox.remove(calibrations)
+ latest.id = 0
+ latest.offlineUserId = "local"
+ latest.trainingAgeMonths = calibrations.maxOf { it.trainingAgeMonths }
+ latest.firstVerifiedSessionAt = nonZeroFirstSession
+ latest.importedHistory = calibrations.any { it.importedHistory }
+ latest.confidence = calibrations.maxOf { it.confidence }
+ latest.hasPastTraining = calibrations.any { it.hasPastTraining }
+ latest.baselinePushups = calibrations.maxOf { it.baselinePushups }
+ latest.baselinePullups = calibrations.maxOf { it.baselinePullups }
+ latest.baselineBenchKg = calibrations.maxOf { it.baselineBenchKg }
+ latest.baselineLatPulldownKg = calibrations.maxOf { it.baselineLatPulldownKg }
+ latest.baselineMileRunSeconds = calibrations.maxOf { it.baselineMileRunSeconds }
+ calibrationBox.put(latest)
+ }
+ }
+ }
+
+ private fun mergeCompletionMaps(values: List): String {
+ val merged = linkedMapOf()
+ values.forEach { raw ->
+ val json = runCatching { JSONObject(raw) }.getOrNull() ?: return@forEach
+ json.keys().forEach { key ->
+ merged[key] = maxOf(merged[key] ?: 0, json.optInt(key, 0))
+ }
+ }
+ return JSONObject(merged as Map<*, *>).toString()
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/BodyMeasurementRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/BodyMeasurementRepository.kt
new file mode 100644
index 0000000..fc98594
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/BodyMeasurementRepository.kt
@@ -0,0 +1,107 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.objectbox.BodyMeasurementEntity
+import com.ironlog.app.data.objectbox.BodyMeasurementEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import io.objectbox.Box
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+/**
+ * Repository for body measurement entries.
+ * Reactive updates are emitted as Flow> via ObjectBoxFlow.observeQuery.
+ */
+data class BodyMeasurementInput(
+ val measuredAt: Long? = null,
+ val bodyweight: Double? = null,
+ val waist: Double? = null,
+ val chest: Double? = null,
+ val arm: Double? = null,
+ val thigh: Double? = null,
+ val notes: String? = null,
+)
+
+class BodyMeasurementRepository(
+ private val bodyBox: Box = ObjectBox.store.boxFor(BodyMeasurementEntity::class.java),
+) {
+ fun getBodyMeasurementsFlow() =
+ bodyBox.query().orderDesc(BodyMeasurementEntity_.measuredAt).build().asFlow()
+
+ suspend fun addBodyMeasurement(input: BodyMeasurementInput = BodyMeasurementInput()): BodyMeasurementEntity =
+ withContext(Dispatchers.IO) {
+ input.bodyweight?.let { require(it >= 0.0) { "bodyweight must be >= 0" } }
+ val now = System.currentTimeMillis()
+ val row = BodyMeasurementEntity().apply {
+ measuredAt = input.measuredAt ?: now
+ bodyweight = input.bodyweight
+ waist = input.waist
+ chest = input.chest
+ arm = input.arm
+ thigh = input.thigh
+ notes = input.notes?.takeIf { it.isNotEmpty() } ?: ""
+ createdAt = now
+ updatedAt = now
+ }
+ bodyBox.put(row)
+ row
+ }
+
+ suspend fun updateBodyMeasurement(slug: String, input: BodyMeasurementInput = BodyMeasurementInput()): BodyMeasurementEntity =
+ withContext(Dispatchers.IO) {
+ val row = bodyBox.query(BodyMeasurementEntity_.uid.equal(slug)).build().use { it.findFirst() }
+ ?: error("Body measurement not found: $slug")
+ input.measuredAt?.let { row.measuredAt = it }
+ // JS updates nullable values when property is present. Kotlin input cannot represent undefined separately;
+ // call clearBodyWeight/explicit nullable variants if that distinction is needed during integration.
+ if (input.bodyweight != null) row.bodyweight = input.bodyweight
+ if (input.waist != null) row.waist = input.waist
+ if (input.chest != null) row.chest = input.chest
+ if (input.arm != null) row.arm = input.arm
+ if (input.thigh != null) row.thigh = input.thigh
+ if (input.notes != null) row.notes = input.notes.takeIf { it.isNotEmpty() } ?: ""
+ row.updatedAt = System.currentTimeMillis()
+ bodyBox.put(row)
+ row
+ }
+
+ suspend fun deleteBodyMeasurement(slug: String) = withContext(Dispatchers.IO) {
+ val row = bodyBox.query(BodyMeasurementEntity_.uid.equal(slug)).build().use { it.findFirst() } ?: return@withContext
+ bodyBox.remove(row)
+ }
+
+ suspend fun getLatestBodyweight(): Double? = withContext(Dispatchers.IO) {
+ bodyBox.query().orderDesc(BodyMeasurementEntity_.measuredAt).build().use { query ->
+ query.find().firstOrNull { (it.bodyweight ?: 0.0) > 0.0 }?.bodyweight
+ }
+ }
+
+ /** Returns the date of the latest body weight entry as a formatted string (e.g. "May 3"). */
+ suspend fun getLatestBodyweightDate(): String? = withContext(Dispatchers.IO) {
+ bodyBox.query().orderDesc(BodyMeasurementEntity_.measuredAt).build().use { query ->
+ query.find().firstOrNull { (it.bodyweight ?: 0.0) > 0.0 }?.measuredAt?.let { ms ->
+ java.time.Instant.ofEpochMilli(ms)
+ .atZone(java.time.ZoneId.systemDefault())
+ .format(java.time.format.DateTimeFormatter.ofPattern("MMM d"))
+ }
+ }
+ }
+
+ /** Returns the delta in kg between the most recent entry and the entry closest to 7 days ago. Null if <2 entries. */
+ suspend fun getWeeklyBodyweightDelta(): Double? = withContext(Dispatchers.IO) {
+ val entries = bodyBox.query().orderDesc(BodyMeasurementEntity_.measuredAt).build().use { q ->
+ q.find().filter { (it.bodyweight ?: 0.0) > 0.0 }
+ }
+ if (entries.size < 2) return@withContext null
+ val latest = entries.first()
+ val sevenDaysAgo = latest.measuredAt - 7L * 24 * 60 * 60 * 1000
+ // Cap look-back: only consider entries within ±3 days of the 7-days-ago target.
+ // Without this cap, if the user logs infrequently the delta could compare against
+ // an entry that is months old, producing a misleading result.
+ val threeDaysMs = 3L * 24 * 60 * 60 * 1000
+ val weekOldEntry = entries.drop(1)
+ .filter { kotlin.math.abs(it.measuredAt - sevenDaysAgo) <= threeDaysMs }
+ .minByOrNull { kotlin.math.abs(it.measuredAt - sevenDaysAgo) }
+ ?: return@withContext null
+ (latest.bodyweight ?: 0.0) - (weekOldEntry.bodyweight ?: 0.0)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/ExerciseRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/ExerciseRepository.kt
new file mode 100644
index 0000000..9fd22a8
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/ExerciseRepository.kt
@@ -0,0 +1,272 @@
+package com.ironlog.app.data.repository
+
+import android.content.Context
+import com.ironlog.app.util.ExerciseTrackingTypeNormalizer
+import com.ironlog.app.data.model.CreateExerciseInput
+import com.ironlog.app.data.model.ExerciseFilters
+import com.ironlog.app.data.model.LegacyExerciseShape
+import com.ironlog.app.data.model.UpdateExerciseInput
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.PlanExerciseEntity
+import com.ironlog.app.data.objectbox.PlanExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity_
+import com.ironlog.app.data.seed.ExerciseSeed
+import com.ironlog.app.domain.intelligence.SubstitutionEngine
+import com.ironlog.app.util.normalizeExerciseName
+import com.ironlog.app.util.normalizeExerciseNameKey
+import com.ironlog.app.util.requireNonEmpty
+import com.ironlog.app.util.validateContributionFraction
+import java.io.File
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
+
+class ExerciseRepository(private val context: Context? = null) {
+ private val exercisesBox get() = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+ private val musclesBox get() = ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java)
+
+ suspend fun seedExercisesIfNeeded(): ExerciseSeed.SeedResult {
+ val ctx = context ?: error("Context is required to seed exerciseLibrary.json")
+ return ExerciseSeed(ctx).seedExercisesIfNeeded()
+ }
+
+ suspend fun backfillExerciseMusclesIfNeeded(): ExerciseSeed.BackfillResult {
+ val ctx = context ?: error("Context is required to backfill exercise muscles")
+ return ExerciseSeed(ctx).backfillExerciseMusclesIfNeeded()
+ }
+
+ private fun getExercisesFlow(filters: ExerciseFilters = ExerciseFilters()): Flow> =
+ exercisesBox.query().build().asFlow().map { rows -> filterRows(rows, filters) }
+
+ suspend fun getExercisesSnapshot(filters: ExerciseFilters = ExerciseFilters()): List =
+ withContext(Dispatchers.IO) { filterRows(exercisesBox.all, filters).map(::mapExerciseRowToLegacyShape) }
+
+ suspend fun getCompactCatalogMarkdown(): String = withContext(Dispatchers.IO) {
+ val canonical = context?.let { catalogMarkdownFile(it) }
+ if (canonical != null && canonical.exists()) {
+ return@withContext canonical.readText()
+ }
+ val generated = buildCompactCatalogMarkdown(filterRows(exercisesBox.all, ExerciseFilters()).map(::mapExerciseRowToLegacyShape))
+ canonical?.let {
+ it.parentFile?.mkdirs()
+ it.writeText(generated)
+ }
+ generated
+ }
+
+ fun searchExercisesFlow(query: String?, filters: ExerciseFilters = ExerciseFilters()): Flow> {
+ val normalized = normalizeExerciseNameKey(query.orEmpty())
+ return kotlinx.coroutines.flow.flow {
+ getExercisesFlow(filters).collect { rows ->
+ emit(if (normalized.isBlank()) rows else rows.filter { it.normalizedName.contains(normalized) })
+ }
+ }
+ }
+
+ suspend fun createCustomExercise(input: CreateExerciseInput): ExerciseEntity = withContext(Dispatchers.IO) {
+ val name = normalizeExerciseName(input.name)
+ requireNonEmpty(name, "name")
+ requireNonEmpty(input.primaryMuscle, "primary_muscle")
+ requireNonEmpty(input.equipment, "equipment")
+ requireNonEmpty(input.category, "category")
+ val normalized = normalizeExerciseNameKey(name)
+ val duplicate = exercisesBox.query(ExerciseEntity_.normalizedName.equal(normalized)).build().use { it.find() }
+ if (duplicate.isNotEmpty()) error("Exercise with this name already exists.")
+
+ // Validate every child before the parent is written so a bad contribution cannot leave
+ // behind a partially-created exercise.
+ input.muscles.orEmpty().forEach { validateContributionFraction(it.contribution_fraction) }
+
+ val now = System.currentTimeMillis()
+ val created = ExerciseEntity().apply {
+ this.name = name
+ normalizedName = normalized
+ primaryMuscle = input.primaryMuscle!!
+ equipment = input.equipment!!
+ category = input.category!!
+ isCustom = true
+ source = "user_custom"
+ notes = input.notes?.toString() ?: ""
+ createdAt = now
+ updatedAt = now
+ isBodyweight = input.isBodyweight ?: (equipment.lowercase() == "bodyweight")
+ trackingType = ExerciseTrackingTypeNormalizer.normalize(
+ name = name,
+ category = category,
+ equipment = equipment,
+ explicitTrackingType = input.trackingType,
+ )
+ movementPattern = input.movementPattern
+ difficulty = input.difficulty
+ secondaryMusclesJson = input.secondaryMuscles?.let { org.json.JSONArray(it).toString() }
+ }
+ ObjectBox.store.runInTx {
+ exercisesBox.put(created)
+ val muscleCreates = input.muscles.orEmpty().map { m ->
+ ExerciseMuscleEntity().apply {
+ exercise.target = created
+ exerciseUid = created.uid
+ muscle = m.muscle.orEmpty().trim()
+ role = (m.role ?: "secondary").trim()
+ contributionFraction = m.contribution_fraction ?: 0.0
+ createdAt = now
+ updatedAt = now
+ }
+ }
+ if (muscleCreates.isNotEmpty()) musclesBox.put(muscleCreates)
+ }
+ syncCompactCatalogMarkdown()
+ created
+ }
+
+ suspend fun updateExercise(id: String, input: UpdateExerciseInput): ExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(id, "id")
+ val exercise = findExerciseByUidOrThrow(id)
+ val now = System.currentTimeMillis()
+ if (!input.name.isNullOrEmpty()) {
+ val updatedName = normalizeExerciseName(input.name)
+ exercise.name = updatedName
+ // Use normalizeExerciseName first to get a non-null String, then call the
+ // String overload of normalizeExerciseNameKey (underscore format) — consistent
+ // with createCustomExercise which also stores in underscore format.
+ exercise.normalizedName = normalizeExerciseNameKey(updatedName)
+ }
+ if (!input.primaryMuscle.isNullOrEmpty()) exercise.primaryMuscle = input.primaryMuscle
+ if (!input.equipment.isNullOrEmpty()) exercise.equipment = input.equipment
+ if (!input.category.isNullOrEmpty()) exercise.category = input.category
+ if (input.notes != null) exercise.notes = input.notes.ifEmpty { "" }
+ exercise.updatedAt = now
+ exercisesBox.put(exercise)
+ syncCompactCatalogMarkdown()
+ exercise
+ }
+
+ suspend fun deleteCustomExercise(id: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(id, "id")
+ ObjectBox.store.runInTx {
+ val exercise = findExerciseByUidOrThrow(id)
+ if (!exercise.isCustom) error("Only custom exercises can be deleted.")
+ val planReferences = ObjectBox.store.boxFor(PlanExerciseEntity::class.java)
+ .query(PlanExerciseEntity_.exerciseUid.equal(id)).build().use { it.count() }
+ val workoutReferences = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java)
+ .query(WorkoutExerciseEntity_.exerciseUid.equal(id)).build().use { it.count() }
+ if (planReferences > 0 || workoutReferences > 0) {
+ error("This exercise is used by a plan or workout and cannot be deleted. Edit it instead.")
+ }
+ val muscles = musclesBox.query(ExerciseMuscleEntity_.exerciseUid.equal(id)).build().use { it.find() }
+ musclesBox.remove(muscles)
+ exercisesBox.remove(exercise)
+ }
+ syncCompactCatalogMarkdown()
+ Unit
+ }
+
+ suspend fun getExerciseById(id: String): ExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(id, "id")
+ findExerciseByUidOrThrow(id)
+ }
+
+ suspend fun getExerciseMuscles(exerciseId: String): List = withContext(Dispatchers.IO) {
+ requireNonEmpty(exerciseId, "exerciseId")
+ musclesBox.query(ExerciseMuscleEntity_.exerciseUid.equal(exerciseId)).build().use { it.find() }
+ }
+
+ suspend fun buildExerciseAlternatives(exerciseId: String, filters: ExerciseFilters = ExerciseFilters()): SubstitutionEngine.AlternativesResult =
+ withContext(Dispatchers.IO) {
+ requireNonEmpty(exerciseId, "exerciseId")
+ val exercises = exercisesBox.all.map(::mapExerciseRowToLegacyShape)
+ val target = exercises.find { it.id == exerciseId || it.exerciseId == exerciseId }
+ ?: return@withContext SubstitutionEngine.AlternativesResult.EMPTY
+ SubstitutionEngine.buildExerciseAlternatives(target, exercises, filters, filters.limit ?: 12)
+ }
+
+ internal fun findExerciseByUidOrThrow(uid: String): ExerciseEntity =
+ exercisesBox.query(ExerciseEntity_.uid.equal(uid)).build().use { it.findFirst() }
+ ?: error("Exercise not found: $uid")
+
+ internal fun findExerciseByName(name: String): ExerciseEntity? =
+ exercisesBox.query(ExerciseEntity_.name.equal(name)).build().use { it.findFirst() }
+
+ internal fun mapExerciseRowToLegacyShape(row: ExerciseEntity): LegacyExerciseShape {
+ val primary = if (row.primaryMuscle.isNotBlank()) listOf(row.primaryMuscle) else emptyList()
+ val category = row.category.ifBlank { "strength" }
+ val trackingType = ExerciseTrackingTypeNormalizer.normalize(
+ name = row.name,
+ category = category,
+ equipment = row.equipment,
+ explicitTrackingType = row.trackingType,
+ )
+ return LegacyExerciseShape(
+ id = row.uid,
+ exerciseId = row.uid,
+ name = row.name,
+ primaryMuscles = primary,
+ primaryMuscle = row.primaryMuscle.ifBlank { null },
+ secondaryMuscles = row.secondaryMusclesJson?.let { json ->
+ runCatching {
+ val arr = org.json.JSONArray(json)
+ (0 until arr.length()).map { arr.getString(it) }
+ }.getOrElse { emptyList() }
+ } ?: emptyList(),
+ equipment = row.equipment.ifBlank { "Other" },
+ category = category,
+ trackingType = trackingType,
+ isCustom = row.isCustom,
+ aliases = emptyList(),
+ isBodyweight = row.isBodyweight || row.equipment.lowercase() == "bodyweight",
+ movementPattern = row.movementPattern,
+ difficulty = row.difficulty,
+ apparatus = row.apparatusJson,
+ equipmentDetail = row.equipmentDetail,
+ sourceTags = emptyList(),
+ notes = row.notes,
+ )
+ }
+
+ private fun filterRows(rows: List, filters: ExerciseFilters): List = rows.filter { row ->
+ val primaryOk = filters.primaryMuscle.isNullOrBlank() || filters.primaryMuscle == "all" || row.primaryMuscle == filters.primaryMuscle
+ val equipmentOk = filters.equipment.isNullOrBlank() || filters.equipment == "all" || row.equipment == filters.equipment
+ val categoryOk = filters.category.isNullOrBlank() || filters.category == "all" || row.category == filters.category
+ val customOk = !filters.customOnly || row.isCustom
+ primaryOk && equipmentOk && categoryOk && customOk
+ }
+
+ private fun syncCompactCatalogMarkdown() {
+ val ctx = context ?: return
+ val file = catalogMarkdownFile(ctx)
+ val rows = filterRows(exercisesBox.all, ExerciseFilters()).map(::mapExerciseRowToLegacyShape)
+ file.parentFile?.mkdirs()
+ file.writeText(buildCompactCatalogMarkdown(rows))
+ }
+
+ private fun catalogMarkdownFile(ctx: Context): File =
+ File(ctx.filesDir, "ai/ironlog_exercise_catalog_compact.md")
+
+ private fun buildCompactCatalogMarkdown(exercises: List): String {
+ val header = """
+# Ironlog Exercise Catalog (Compact)
+
+Use this catalog as the source of truth for exercise naming and metadata.
+Format: `Exercise Name | Primary Muscle | Equipment | Category | Tracking Type | Movement Pattern`
+""".trimIndent()
+ val lines = exercises
+ .sortedBy { it.name.lowercase() }
+ .map { ex ->
+ val primary = ex.primaryMuscle ?: ex.primaryMuscles.firstOrNull() ?: "Unknown"
+ "${ex.name} | $primary | ${ex.equipment} | ${ex.category} | ${ex.trackingType} | ${ex.movementPattern}"
+ }
+ return buildString {
+ appendLine(header)
+ appendLine()
+ appendLine("```text")
+ lines.forEach { appendLine(it) }
+ appendLine("```")
+ }
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/HistoryRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/HistoryRepository.kt
new file mode 100644
index 0000000..30298ef
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/HistoryRepository.kt
@@ -0,0 +1,63 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.WorkoutEntity
+import com.ironlog.app.data.objectbox.WorkoutEntity_
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutSetEntity
+import com.ironlog.app.data.objectbox.WorkoutSetEntity_
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+class HistoryRepository {
+ private val workoutBox get() = ObjectBox.store.boxFor(WorkoutEntity::class.java)
+ private val workoutExerciseBox get() = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java)
+ private val workoutSetBox get() = ObjectBox.store.boxFor(WorkoutSetEntity::class.java)
+
+ suspend fun updateWorkout(
+ uid: String,
+ startedAt: Long? = null,
+ durationSeconds: Int? = null,
+ rating: Double? = null,
+ notes: String? = null,
+ ): WorkoutEntity = withContext(Dispatchers.IO) {
+ val row = workoutBox.query(WorkoutEntity_.uid.equal(uid)).build().use { it.findFirst() }
+ ?: error("Workout not found: $uid")
+ startedAt?.let { row.startedAt = it }
+ durationSeconds?.let { row.durationSeconds = kotlin.math.max(0, it) }
+ rating?.let { row.rating = it }
+ if (notes != null) row.notes = notes
+ row.updatedAt = System.currentTimeMillis()
+ workoutBox.put(row)
+ row
+ }
+
+ suspend fun deleteWorkout(uid: String) = withContext(Dispatchers.IO) {
+ deleteWorkoutsBlocking(listOf(uid))
+ }
+
+ suspend fun deleteWorkouts(ids: List) = withContext(Dispatchers.IO) {
+ deleteWorkoutsBlocking(ids)
+ }
+
+ private fun deleteWorkoutsBlocking(ids: List) {
+ if (ids.isEmpty()) return
+ ObjectBox.store.runInTx {
+ val rows = workoutBox.query(WorkoutEntity_.uid.oneOf(ids.distinct().toTypedArray()))
+ .build().use { it.find() }
+ if (rows.isEmpty()) return@runInTx
+ val rowUids = rows.map { it.uid }.toTypedArray()
+ val exercises = workoutExerciseBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(rowUids))
+ .build().use { it.find() }
+ val exerciseUids = exercises.map { it.uid }.toTypedArray()
+ val sets = if (exerciseUids.isEmpty()) emptyList() else {
+ workoutSetBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(exerciseUids))
+ .build().use { it.find() }
+ }
+ workoutSetBox.remove(sets)
+ workoutExerciseBox.remove(exercises)
+ workoutBox.remove(rows)
+ }
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/ImportExportRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/ImportExportRepository.kt
new file mode 100644
index 0000000..16d451b
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/ImportExportRepository.kt
@@ -0,0 +1,1331 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.objectbox.AppSettingEntity
+import com.ironlog.app.data.objectbox.AppSettingEntity_
+import com.ironlog.app.data.objectbox.AthleteCalibrationEntity
+import com.ironlog.app.data.objectbox.AthleteCalibrationEntity_
+import com.ironlog.app.data.objectbox.BodyMeasurementEntity
+import com.ironlog.app.data.objectbox.BodyMeasurementEntity_
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity_
+import com.ironlog.app.data.objectbox.GamificationProfileEntity
+import com.ironlog.app.data.objectbox.GamificationProfileEntity_
+import com.ironlog.app.data.objectbox.IronLedgerEventEntity
+import com.ironlog.app.data.objectbox.IronLedgerEventEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.PlanDayEntity
+import com.ironlog.app.data.objectbox.PlanDayEntity_
+import com.ironlog.app.data.objectbox.PlanEntity
+import com.ironlog.app.data.objectbox.PlanEntity_
+import com.ironlog.app.data.objectbox.PlanExerciseEntity
+import com.ironlog.app.data.objectbox.PlanExerciseEntity_
+import com.ironlog.app.data.objectbox.ProgressPhotoEntity
+import com.ironlog.app.data.objectbox.ProgressPhotoEntity_
+import com.ironlog.app.data.objectbox.WorkoutEntity
+import com.ironlog.app.data.objectbox.WorkoutEntity_
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutImportProvenanceMigration
+import com.ironlog.app.data.objectbox.WorkoutSetEntity
+import com.ironlog.app.data.objectbox.WorkoutSetEntity_
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import timber.log.Timber
+import org.json.JSONArray
+import org.json.JSONObject
+import java.time.Instant
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZoneId
+import kotlin.math.max
+
+internal val FULL_BACKUP_DATA_SECTIONS = setOf(
+ "exercises",
+ "exercise_muscles",
+ "plans",
+ "plan_days",
+ "plan_exercises",
+ "workouts",
+ "workout_exercises",
+ "workout_sets",
+ "body_measurements",
+ "progress_photos",
+ "app_settings",
+ "athlete_calibrations",
+ "gamification_profiles",
+ "iron_ledger_events",
+)
+
+internal fun parseImportEpochMillis(
+ value: Any?,
+ fallback: Long,
+ zoneId: ZoneId = ZoneId.systemDefault(),
+): Long = when (value) {
+ is Number -> value.toLong()
+ is String -> value.trim().takeIf { it.isNotEmpty() }?.let { raw ->
+ raw.toLongOrNull()
+ ?: runCatching { Instant.parse(raw).toEpochMilli() }.getOrNull()
+ ?: runCatching { LocalDate.parse(raw).atStartOfDay(zoneId).toInstant().toEpochMilli() }.getOrNull()
+ ?: runCatching { LocalDateTime.parse(raw.replace(" ", "T")).atZone(zoneId).toInstant().toEpochMilli() }.getOrNull()
+ } ?: fallback
+ else -> fallback
+}
+
+data class ImportCounts(
+ val exercises: Int = 0,
+ val exerciseMuscles: Int = 0,
+ val plans: Int = 0,
+ val planDays: Int = 0,
+ val planExercises: Int = 0,
+ val workouts: Int = 0,
+ val workoutExercises: Int = 0,
+ val sets: Int = 0,
+ val bodyMeasurements: Int = 0,
+ val progressPhotos: Int = 0,
+ val settings: Int = 0,
+ val athleteCalibrations: Int = 0,
+ val gamificationProfiles: Int = 0,
+ val ironLedgerEvents: Int = 0,
+)
+
+data class ImportPreview(
+ val valid: Boolean,
+ val format: String = "unknown",
+ val convertedFrom: String? = null,
+ val reason: String? = null,
+ val errors: List = emptyList(),
+ val warnings: List = emptyList(),
+ val counts: ImportCounts = ImportCounts(),
+ val workouts: Int = 0,
+ val plans: Int = 0,
+ val sets: Int = 0,
+ val bodyMeasurements: Int = 0,
+ val settings: Int = 0,
+ val customExercises: List = emptyList(),
+ val duplicateExerciseNames: List = emptyList(),
+ val relationshipWarnings: List = emptyList(),
+ val unsupportedRows: Int = 0,
+)
+
+class ImportExportRepository(
+) {
+ companion object {
+ const val EXPORT_TYPE = "ironlog_watermelon_export"
+ const val EXPORT_VERSION = 1
+ }
+
+ suspend fun exportDatabase(): JSONObject = withContext(Dispatchers.IO) {
+ ObjectBox.store.callInReadTx {
+ val exercises = ObjectBox.store.boxFor(ExerciseEntity::class.java).all
+ val exerciseMuscles = ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java).all
+ val plans = ObjectBox.store.boxFor(PlanEntity::class.java).all
+ val planDays = ObjectBox.store.boxFor(PlanDayEntity::class.java).all
+ val planExercises = ObjectBox.store.boxFor(PlanExerciseEntity::class.java).all
+ val workouts = ObjectBox.store.boxFor(WorkoutEntity::class.java).all
+ val workoutExercises = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java).all
+ val workoutSets = ObjectBox.store.boxFor(WorkoutSetEntity::class.java).all
+ val body = ObjectBox.store.boxFor(BodyMeasurementEntity::class.java).all
+ val photos = ObjectBox.store.boxFor(ProgressPhotoEntity::class.java).all
+ val settings = ObjectBox.store.boxFor(AppSettingEntity::class.java).all
+ val athleteCalibrations = ObjectBox.store.boxFor(AthleteCalibrationEntity::class.java).all
+ val gamificationProfiles = ObjectBox.store.boxFor(GamificationProfileEntity::class.java).all
+ val ironLedgerEvents = ObjectBox.store.boxFor(IronLedgerEventEntity::class.java).all
+
+ JSONObject()
+ .put("version", EXPORT_VERSION)
+ .put("type", EXPORT_TYPE)
+ .put("exportedAt", java.time.Instant.now().toString())
+ .put(
+ "data",
+ JSONObject()
+ .put("exercises", JSONArray().apply { exercises.forEach { put(JSONObject().put("id", it.uid).put("name", it.name).put("normalized_name", it.normalizedName).put("primary_muscle", it.primaryMuscle).put("equipment", it.equipment).put("category", it.category).put("is_custom", it.isCustom).put("source", it.source).put("notes", it.notes).put("equipment_detail", it.equipmentDetail ?: JSONObject.NULL).put("apparatus_json", it.apparatusJson ?: JSONObject.NULL).put("tracking_type", it.trackingType ?: JSONObject.NULL).put("is_bodyweight", it.isBodyweight).put("requires_external_load", it.requiresExternalLoad).put("movement_pattern", it.movementPattern ?: JSONObject.NULL).put("difficulty", it.difficulty ?: JSONObject.NULL).put("aliases_json", it.aliasesJson ?: JSONObject.NULL).put("source_tags_json", it.sourceTagsJson ?: JSONObject.NULL).put("secondary_muscles_json", it.secondaryMusclesJson ?: JSONObject.NULL).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("exercise_muscles", JSONArray().apply { exerciseMuscles.forEach { put(JSONObject().put("id", it.uid).put("exercise_id", it.exerciseUid).put("muscle", it.muscle).put("role", it.role).put("contribution_fraction", it.contributionFraction).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("plans", JSONArray().apply { plans.forEach { put(JSONObject().put("id", it.uid).put("name", it.name).put("goal", it.goal).put("description", it.description).put("is_active", it.isActive).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("plan_days", JSONArray().apply { planDays.forEach { put(JSONObject().put("id", it.uid).put("plan_id", it.planUid).put("name", it.name).put("color", it.color).put("order_index", it.orderIndex).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("plan_exercises", JSONArray().apply { planExercises.forEach { put(JSONObject().put("id", it.uid).put("plan_day_id", it.planDayUid).put("exercise_id", it.exerciseUid).put("order_index", it.orderIndex).put("sets", it.sets).put("reps", it.reps).put("rest_seconds", it.restSeconds).put("superset_group", it.supersetGroup).put("is_warmup", it.isWarmup).put("notes", it.notes).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("workouts", JSONArray().apply { workouts.forEach { put(JSONObject().put("id", it.uid).put("plan_id", it.planUid ?: "").put("plan_day_id", it.planDayUid ?: "").put("name", it.name).put("started_at", it.startedAt).put("completed_at", it.completedAt ?: JSONObject.NULL).put("duration_seconds", it.durationSeconds).put("rating", it.rating ?: JSONObject.NULL).put("notes", it.notes).put("status", it.status).put("imported", it.imported).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("workout_exercises", JSONArray().apply { workoutExercises.forEach { put(JSONObject().put("id", it.uid).put("workout_id", it.workoutUid).put("exercise_id", it.exerciseUid).put("order_index", it.orderIndex).put("superset_group", it.supersetGroup).put("notes", it.notes).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("workout_sets", JSONArray().apply { workoutSets.forEach { put(JSONObject().put("id", it.uid).put("workout_exercise_id", it.workoutExerciseUid).put("set_index", it.setIndex).put("weight", it.weight).put("reps", it.reps).put("rpe", it.rpe ?: JSONObject.NULL).put("rir", it.rir ?: JSONObject.NULL).put("rest_seconds", it.restSeconds).put("is_warmup", it.isWarmup).put("is_dropset", it.isDropset).put("is_amrap", it.isAmrap).put("to_failure", it.toFailure).put("completed_at", it.completedAt ?: JSONObject.NULL).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("body_measurements", JSONArray().apply { body.forEach { put(JSONObject().put("id", it.uid).put("measured_at", it.measuredAt).put("bodyweight", it.bodyweight ?: JSONObject.NULL).put("waist", it.waist ?: JSONObject.NULL).put("chest", it.chest ?: JSONObject.NULL).put("arm", it.arm ?: JSONObject.NULL).put("thigh", it.thigh ?: JSONObject.NULL).put("notes", it.notes).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("progress_photos", JSONArray().apply { photos.forEach { put(JSONObject().put("id", it.uid).put("file_uri", it.fileUri).put("taken_at", it.takenAt).put("bodyweight", it.bodyweight ?: JSONObject.NULL).put("notes", it.notes).put("created_at", it.createdAt).put("updated_at", it.updatedAt)) } })
+ .put("app_settings", JSONArray().apply { settings.forEach { put(JSONObject().put("id", it.key).put("key", it.key).put("value", it.value).put("value_type", it.valueType).put("updated_at", it.updatedAt)) } })
+ .put("athlete_calibrations", JSONArray().apply {
+ athleteCalibrations.forEach {
+ put(
+ JSONObject()
+ .put("offline_user_id", it.offlineUserId)
+ .put("training_age_months", it.trainingAgeMonths)
+ .put("historical_training_days_per_week", it.historicalTrainingDaysPerWeek)
+ .put("first_verified_session_at", it.firstVerifiedSessionAt)
+ .put("weight_unit", it.weightUnit)
+ .put("bodyweight_kg", it.bodyweightKg ?: JSONObject.NULL)
+ .put("goal_mode", it.goalMode)
+ .put("weekly_goal_days", it.weeklyGoalDays)
+ .put("imported_history", it.importedHistory)
+ .put("confidence", it.confidence)
+ .put("updated_at", it.updatedAt)
+ .put("has_past_training", it.hasPastTraining)
+ .put("has_gym_access", it.hasGymAccess)
+ .put("baseline_pushups", it.baselinePushups)
+ .put("baseline_pullups", it.baselinePullups)
+ .put("baseline_bench_kg", it.baselineBenchKg)
+ .put("baseline_lat_pulldown_kg", it.baselineLatPulldownKg)
+ .put("baseline_mile_run_seconds", it.baselineMileRunSeconds)
+ )
+ }
+ })
+ .put("gamification_profiles", JSONArray().apply {
+ gamificationProfiles.forEach {
+ put(
+ JSONObject()
+ .put("offline_user_id", it.offlineUserId)
+ .put("total_xp", it.totalXp)
+ .put("level", it.level)
+ .put("xp_in_level", it.xpInLevel)
+ .put("rank", it.rank)
+ .put("active_title", it.activeTitle)
+ .put("stats_json", it.statsJson)
+ .put("weekly_xp", it.weeklyXp)
+ .put("weekly_xp_reset_week", it.weeklyXpResetWeek)
+ .put("streak_weeks", it.streakWeeks)
+ .put("recovery_circuit_completions_json", it.makeupCompletionsJson)
+ .put("unlocked_badges", it.unlockedBadges)
+ )
+ }
+ })
+ .put("iron_ledger_events", JSONArray().apply {
+ ironLedgerEvents.forEach {
+ put(
+ JSONObject()
+ .put("event_id", it.eventId)
+ .put("source_type", it.sourceType)
+ .put("source_id", it.sourceId)
+ .put("event_kind", it.eventKind)
+ .put("occurred_at", it.occurredAt)
+ .put("xp_delta", it.xpDelta)
+ .put("stat_deltas_json", it.statDeltasJson)
+ .put("trust_score", it.trustScore)
+ .put("fingerprint", it.fingerprint)
+ .put("metadata_json", it.metadataJson)
+ .put("invalidated", it.invalidated)
+ )
+ }
+ }),
+ )
+ }
+ }
+
+ private fun isIronLogExport(payload: JSONObject): Boolean {
+ return payload.optString("type") == EXPORT_TYPE && payload.optInt("version") == 1
+ }
+
+ private fun isLegacySQLiteBundle(payload: JSONObject): Boolean {
+ val schema = payload.optString("schema", "")
+ return schema.startsWith("IRONLOG_SQLITE_EXPORT_V") && payload.optJSONObject("payload") != null
+ }
+
+ private fun detectImportFormat(payload: JSONObject): String {
+ if (isIronLogExport(payload)) return "ironlog_v1"
+ if (isLegacySQLiteBundle(payload)) return "sqlite_v1"
+ if (payload.has("domains") || payload.has("plans") || payload.has("history") || payload.has("bodyWeight") || payload.has("customExercises") || payload.optJSONObject("payload")?.has("plans") == true) {
+ return "legacy_async"
+ }
+ return "unknown"
+ }
+
+ private fun countRows(data: JSONObject?, table: String): Int {
+ return data?.optJSONArray(table)?.length() ?: 0
+ }
+
+ private fun buildImportCounts(data: JSONObject?): ImportCounts {
+ return ImportCounts(
+ exercises = countRows(data, "exercises"),
+ exerciseMuscles = countRows(data, "exercise_muscles"),
+ plans = countRows(data, "plans"),
+ planDays = countRows(data, "plan_days"),
+ planExercises = countRows(data, "plan_exercises"),
+ workouts = countRows(data, "workouts"),
+ workoutExercises = countRows(data, "workout_exercises"),
+ sets = countRows(data, "workout_sets"),
+ bodyMeasurements = countRows(data, "body_measurements"),
+ progressPhotos = countRows(data, "progress_photos"),
+ settings = countRows(data, "app_settings"),
+ athleteCalibrations = countRows(data, "athlete_calibrations"),
+ gamificationProfiles = countRows(data, "gamification_profiles"),
+ ironLedgerEvents = countRows(data, "iron_ledger_events"),
+ )
+ }
+
+ private fun findDuplicateExerciseNames(exercises: JSONArray?): List {
+ if (exercises == null) return emptyList()
+ val seen = mutableMapOf>()
+ for (i in 0 until exercises.length()) {
+ val row = exercises.optJSONObject(i) ?: continue
+ val norm = row.optString("normalized_name").ifEmpty { row.optString("name") }
+ val key = norm.lowercase().replace(Regex("[^a-z0-9]"), "").trim()
+ if (key.isEmpty()) continue
+ if (!seen.containsKey(key)) seen[key] = mutableListOf()
+ seen[key]!!.add(row.optString("name").ifEmpty { row.optString("normalized_name", key) })
+ }
+ return seen.values.filter { it.size > 1 }.map { it.first() }.take(12)
+ }
+
+ private fun buildRelationshipWarnings(data: JSONObject?): List {
+ val warnings = mutableListOf()
+ if (data == null) return warnings
+ fun ids(table: String) = (data.optJSONArray(table) ?: JSONArray()).let { arr ->
+ (0 until arr.length()).mapNotNull { arr.optJSONObject(it)?.optString("id") }.toSet()
+ }
+ val planIds = ids("plans")
+ val planDayIds = ids("plan_days")
+ val exerciseIds = ids("exercises")
+ val workoutIds = ids("workouts")
+ val workoutExerciseIds = ids("workout_exercises")
+
+ val missingPlanDays = (data.optJSONArray("plan_days") ?: JSONArray()).let { arr ->
+ (0 until arr.length()).count { arr.optJSONObject(it)?.optString("plan_id")?.isNotBlank() == true && !planIds.contains(arr.optJSONObject(it)?.optString("plan_id")) }
+ }
+ if (missingPlanDays > 0) warnings.add("$missingPlanDays plan day${if(missingPlanDays==1) "" else "s"} reference missing plans.")
+
+ val missingPlanExerciseDays = (data.optJSONArray("plan_exercises") ?: JSONArray()).let { arr ->
+ (0 until arr.length()).count { arr.optJSONObject(it)?.optString("plan_day_id")?.isNotBlank() == true && !planDayIds.contains(arr.optJSONObject(it)?.optString("plan_day_id")) }
+ }
+ if (missingPlanExerciseDays > 0) warnings.add("$missingPlanExerciseDays planned exercise${if(missingPlanExerciseDays==1) "" else "s"} reference missing days.")
+
+ val missingPlanExerciseExercises = (data.optJSONArray("plan_exercises") ?: JSONArray()).let { arr ->
+ if (exerciseIds.isEmpty()) 0 else (0 until arr.length()).count { arr.optJSONObject(it)?.optString("exercise_id")?.isNotBlank() == true && !exerciseIds.contains(arr.optJSONObject(it)?.optString("exercise_id")) }
+ }
+ if (missingPlanExerciseExercises > 0) warnings.add("$missingPlanExerciseExercises planned exercise${if(missingPlanExerciseExercises==1) "" else "s"} reference missing exercises.")
+
+ val missingWorkoutExerciseWorkouts = (data.optJSONArray("workout_exercises") ?: JSONArray()).let { arr ->
+ (0 until arr.length()).count { arr.optJSONObject(it)?.optString("workout_id")?.isNotBlank() == true && !workoutIds.contains(arr.optJSONObject(it)?.optString("workout_id")) }
+ }
+ if (missingWorkoutExerciseWorkouts > 0) warnings.add("$missingWorkoutExerciseWorkouts workout exercise${if(missingWorkoutExerciseWorkouts==1) "" else "s"} reference missing workouts.")
+
+ val missingWorkoutExerciseExercises = (data.optJSONArray("workout_exercises") ?: JSONArray()).let { arr ->
+ if (exerciseIds.isEmpty()) 0 else (0 until arr.length()).count { arr.optJSONObject(it)?.optString("exercise_id")?.isNotBlank() == true && !exerciseIds.contains(arr.optJSONObject(it)?.optString("exercise_id")) }
+ }
+ if (missingWorkoutExerciseExercises > 0) warnings.add("$missingWorkoutExerciseExercises workout exercise${if(missingWorkoutExerciseExercises==1) "" else "s"} reference missing exercises.")
+
+ val missingSetParents = (data.optJSONArray("workout_sets") ?: JSONArray()).let { arr ->
+ (0 until arr.length()).count { arr.optJSONObject(it)?.optString("workout_exercise_id")?.isNotBlank() == true && !workoutExerciseIds.contains(arr.optJSONObject(it)?.optString("workout_exercise_id")) }
+ }
+ if (missingSetParents > 0) warnings.add("$missingSetParents set${if(missingSetParents==1) "" else "s"} reference missing workout exercises.")
+
+ return warnings
+ }
+
+ private fun getUnsupportedRows(data: JSONObject?): Int {
+ if (data == null) return 0
+ var count = 0
+ data.keys().forEach { if (it !in FULL_BACKUP_DATA_SECTIONS) count++ }
+ return count
+ }
+
+ fun previewImportPayload(text: String): ImportPreview {
+ val raw = runCatching { JSONObject(text) }
+ .onFailure { Timber.w(it, "previewImportPayload: invalid JSON") }
+ .getOrNull() ?: return ImportPreview(valid = false, format = "invalid_json", reason = "Invalid JSON", errors = listOf("Invalid JSON"))
+ val format = detectImportFormat(raw)
+ if (format == "unknown") return ImportPreview(valid = false, format = format, reason = "Unsupported payload format.", errors = listOf("Unsupported payload format."))
+
+ var normalizedPayload = raw
+ var convertedFrom: String? = null
+ val warnings = mutableListOf()
+
+ try {
+ if (format != "ironlog_v1") {
+ val conv = convertLegacyToIronLogExport(raw)
+ normalizedPayload = conv
+ convertedFrom = if (isLegacySQLiteBundle(raw)) "sqlite_v1" else "legacy_async"
+ warnings.add("Legacy $convertedFrom backup will be normalized into IronLog format.")
+ }
+ } catch (e: Exception) {
+ return ImportPreview(valid = false, format = format, reason = e.message ?: "Normalization failed", errors = listOf(e.message ?: "Normalization failed"))
+ }
+
+ if (normalizedPayload.optString("type") != EXPORT_TYPE || normalizedPayload.optInt("version") != EXPORT_VERSION) {
+ return ImportPreview(valid = false, format = format, reason = "Unsupported backup format", errors = listOf("Unsupported backup format"))
+ }
+ val data = normalizedPayload.optJSONObject("data") ?: return ImportPreview(valid = false, format = format, reason = "Missing data object", errors = listOf("Missing data object"))
+
+ val counts = buildImportCounts(data)
+ val duplicateExerciseNames = findDuplicateExerciseNames(data.optJSONArray("exercises"))
+ val relationshipWarnings = buildRelationshipWarnings(data)
+ val unsupportedRows = getUnsupportedRows(data)
+
+ val customExercisesArr = data.optJSONArray("exercises") ?: JSONArray()
+ val customExercises = mutableListOf()
+ for (i in 0 until customExercisesArr.length()) {
+ val ex = customExercisesArr.optJSONObject(i) ?: continue
+ if (ex.optBoolean("is_custom", false) || ex.optString("source") == "user_custom") {
+ val name = ex.optString("name")
+ if (name.isNotBlank()) customExercises.add(name)
+ }
+ }
+
+ if (duplicateExerciseNames.isNotEmpty()) warnings.add("${duplicateExerciseNames.size} duplicate exercise name group${if (duplicateExerciseNames.size == 1) "" else "s"} detected in this file.")
+ warnings.addAll(relationshipWarnings)
+ if (unsupportedRows > 0) warnings.add("$unsupportedRows unsupported data section${if (unsupportedRows == 1) "" else "s"} will be ignored.")
+
+ return ImportPreview(
+ valid = true,
+ format = format,
+ convertedFrom = convertedFrom,
+ reason = null,
+ errors = emptyList(),
+ warnings = warnings,
+ counts = counts,
+ workouts = counts.workouts,
+ plans = counts.plans,
+ sets = counts.sets,
+ bodyMeasurements = counts.bodyMeasurements,
+ settings = counts.settings,
+ customExercises = customExercises.take(20),
+ duplicateExerciseNames = duplicateExerciseNames,
+ relationshipWarnings = relationshipWarnings,
+ unsupportedRows = unsupportedRows
+ )
+ }
+
+ suspend fun runConfirmedImport(text: String, mode: String = "replace"): ImportPreview = withContext(Dispatchers.IO) {
+ val raw = runCatching { JSONObject(text) }
+ .onFailure { Timber.e(it, "runConfirmedImport: failed to parse backup JSON") }
+ .getOrElse { throw IllegalArgumentException("Corrupt or empty backup file: ${it.message}", it) }
+ val preview = previewImportPayload(text)
+ require(preview.valid) { preview.reason ?: "Invalid payload" }
+ val normalized = normalizePayloadForImport(raw)
+ backfillMissingAthleteStateRows(normalized.getJSONObject("data"))
+ val hasImportedExercises = (normalized.optJSONObject("data")?.optJSONArray("exercises")?.length() ?: 0) > 0
+ ObjectBox.store.runInTx {
+ if (mode == "replace") clearUserDataTables(clearExercises = hasImportedExercises)
+ importData(normalized.getJSONObject("data"), mergeSingletons = mode != "replace")
+ }
+ // Only flag as imported-history when actual workout rows were present
+ val importedWorkouts = (normalized.optJSONObject("data")?.optJSONArray("workouts")?.length() ?: 0)
+ if (importedWorkouts > 0) {
+ ObjectBox.store.runInTx { markLedgerImportedHistory() }
+ }
+ WorkoutImportProvenanceMigration.run()
+ preview
+ }
+
+ private fun markLedgerImportedHistory() {
+ val now = System.currentTimeMillis()
+ val settingsBox = ObjectBox.store.boxFor(AppSettingEntity::class.java)
+ settingsBox.put(AppSettingEntity().apply {
+ key = "ledger_imported_history"
+ value = "true"
+ valueType = "boolean"
+ updatedAt = now
+ })
+ }
+
+ private fun normalizePayloadForImport(raw: JSONObject): JSONObject {
+ if (raw.optString("type") == EXPORT_TYPE && raw.optInt("version") == EXPORT_VERSION && raw.optJSONObject("data") != null) return raw
+ return convertLegacyToIronLogExport(raw)
+ }
+
+ private fun convertLegacyToIronLogExport(raw: JSONObject): JSONObject {
+ val now = System.currentTimeMillis()
+ val data = JSONObject()
+ .put("exercises", JSONArray())
+ .put("exercise_muscles", JSONArray())
+ .put("plans", JSONArray())
+ .put("plan_days", JSONArray())
+ .put("plan_exercises", JSONArray())
+ .put("workouts", JSONArray())
+ .put("workout_exercises", JSONArray())
+ .put("workout_sets", JSONArray())
+ .put("body_measurements", JSONArray())
+ .put("progress_photos", JSONArray())
+ .put("app_settings", JSONArray())
+ .put("athlete_calibrations", JSONArray())
+ .put("gamification_profiles", JSONArray())
+ .put("iron_ledger_events", JSONArray())
+
+ val (snapshot, appState) = extractLegacySnapshot(raw)
+ val exerciseByNorm = linkedMapOf()
+ var exCounter = 0
+ var planCounter = 0
+ var workoutCounter = 0
+ var bodyCounter = 0
+
+ fun normalizeName(name: String): String = name.trim().replace(Regex("\\s+"), " ")
+ fun normalizeKey(name: String): String = normalizeName(name).lowercase().replace(Regex("[^a-z0-9]+"), " ").trim()
+ fun stableId(prefix: String, rawId: String?, index: Int): String {
+ val cleaned = rawId?.trim().orEmpty()
+ return if (cleaned.isNotBlank()) "legacy_${prefix}_${cleaned.replace(Regex("[^a-zA-Z0-9_-]"), "_")}" else "legacy_${prefix}_${prefix.hashCode().and(0xFFFFFF).toString(16)}_${index}"
+ }
+ fun ensureExercise(obj: JSONObject): String {
+ val name = normalizeName(obj.optString("name", obj.optString("exerciseName", obj.optString("title", "Exercise"))))
+ val norm = normalizeKey(name)
+ exerciseByNorm[norm]?.let { return it }
+ exCounter++
+ val id = stableId("exercise", obj.optString("id"), exCounter)
+ val primary = obj.optString("primaryMuscle", obj.optString("muscleGroup", obj.optString("muscle", "Other")))
+ val equipment = obj.optString("equipment", "Other")
+ val category = obj.optString("category", obj.optString("type", "strength"))
+ val isCustom = if (obj.has("isCustom")) obj.optBoolean("isCustom", true) else true
+ data.getJSONArray("exercises").put(
+ JSONObject()
+ .put("id", id)
+ .put("name", name)
+ .put("normalized_name", norm)
+ .put("primary_muscle", primary)
+ .put("equipment", equipment)
+ .put("category", category)
+ .put("is_custom", isCustom)
+ .put("source", if (isCustom) "user_custom" else "import")
+ .put("notes", obj.optString("notes"))
+ .put("created_at", now)
+ .put("updated_at", now),
+ )
+ data.getJSONArray("exercise_muscles").put(
+ JSONObject()
+ .put("id", stableId("exercise_muscle", "${id}_primary", exCounter))
+ .put("exercise_id", id)
+ .put("muscle", primary)
+ .put("role", "primary")
+ .put("contribution_fraction", 1.0)
+ .put("created_at", now)
+ .put("updated_at", now),
+ )
+ exerciseByNorm[norm] = id
+ return id
+ }
+
+ (snapshot.optJSONArray("customExercises") ?: JSONArray()).forEachObject { ensureExercise(it) }
+
+ (snapshot.optJSONArray("plans") ?: JSONArray()).forEachObject { plan ->
+ planCounter++
+ val planId = stableId("plan", plan.optString("id"), planCounter)
+ data.getJSONArray("plans").put(
+ JSONObject()
+ .put("id", planId)
+ .put("name", plan.optString("name", "Imported Plan $planCounter"))
+ .put("goal", plan.optString("goal", "General Fitness"))
+ .put("description", plan.optString("description"))
+ .put("is_active", plan.optBoolean("isActive", false))
+ .put("created_at", now)
+ .put("updated_at", now),
+ )
+ val days = if (plan.optJSONArray("days") != null) plan.optJSONArray("days")!! else (plan.optJSONArray("workoutDays") ?: JSONArray())
+ for (dIdx in 0 until days.length()) {
+ val day = days.optJSONObject(dIdx) ?: continue
+ val dayId = stableId("plan_day", day.optString("id"), dIdx + 1)
+ data.getJSONArray("plan_days").put(
+ JSONObject()
+ .put("id", dayId)
+ .put("plan_id", planId)
+ .put("name", day.optString("name", day.optString("title", "Day ${dIdx + 1}")))
+ .put("color", day.optString("color", "#FF4500"))
+ .put("order_index", dIdx)
+ .put("created_at", now)
+ .put("updated_at", now),
+ )
+ val exercises = if (day.optJSONArray("exercises") != null) day.optJSONArray("exercises")!! else (day.optJSONArray("items") ?: JSONArray())
+ for (eIdx in 0 until exercises.length()) {
+ val ex = exercises.optJSONObject(eIdx) ?: continue
+ val exId = ensureExercise(ex)
+ data.getJSONArray("plan_exercises").put(
+ JSONObject()
+ .put("id", stableId("plan_exercise", ex.optString("id"), eIdx + 1))
+ .put("plan_day_id", dayId)
+ .put("exercise_id", exId)
+ .put("order_index", eIdx)
+ .put("sets", max(1, ex.optInt("sets", 3)))
+ .put("reps", ex.optString("reps", ex.optString("repRange", "8-12")))
+ .put("rest_seconds", max(0, ex.optInt("restSeconds", ex.optInt("rest", 90))))
+ .put("superset_group", ex.optString("supersetGroup"))
+ .put("is_warmup", ex.optBoolean("isWarmup", false))
+ .put("notes", ex.optString("notes"))
+ .put("created_at", now)
+ .put("updated_at", now),
+ )
+ }
+ }
+ }
+
+ (snapshot.optJSONArray("history") ?: JSONArray()).forEachObject { workout ->
+ workoutCounter++
+ val dateFallback = parseImportEpochMillis(workout.opt("date"), now)
+ val startedAt = parseImportEpochMillis(
+ workout.opt("startedAt").takeUnless { it == null || it == JSONObject.NULL }
+ ?: workout.opt("timestamp"),
+ dateFallback,
+ )
+ val completedAt = parseImportEpochMillis(workout.opt("completedAt"), startedAt)
+ val workoutId = stableId("workout", workout.optString("id"), workoutCounter)
+ data.getJSONArray("workouts").put(
+ JSONObject()
+ .put("id", workoutId)
+ .put("plan_id", "")
+ .put("plan_day_id", "")
+ .put("name", workout.optString("name", workout.optString("day", "Imported Workout $workoutCounter")))
+ .put("started_at", startedAt)
+ .put("completed_at", completedAt)
+ .put("duration_seconds", max(0, workout.optInt("durationSeconds", workout.optInt("duration", 0))))
+ .put("rating", if (workout.has("rating")) workout.optDouble("rating") else JSONObject.NULL)
+ .put("notes", workout.optString("notes"))
+ .put("status", workout.optString("status", "completed"))
+ .put("imported", true)
+ .put("created_at", startedAt)
+ .put("updated_at", completedAt),
+ )
+ val wExercises = if (workout.optJSONArray("exercises") != null) workout.optJSONArray("exercises")!! else (workout.optJSONArray("items") ?: JSONArray())
+ for (eIdx in 0 until wExercises.length()) {
+ val ex = wExercises.optJSONObject(eIdx) ?: continue
+ val workoutExerciseId = stableId("workout_exercise", ex.optString("id"), eIdx + 1)
+ val exerciseId = ensureExercise(ex)
+ data.getJSONArray("workout_exercises").put(
+ JSONObject()
+ .put("id", workoutExerciseId)
+ .put("workout_id", workoutId)
+ .put("exercise_id", exerciseId)
+ .put("order_index", eIdx)
+ .put("superset_group", ex.optString("supersetGroup"))
+ .put("notes", ex.optString("notes"))
+ .put("created_at", startedAt)
+ .put("updated_at", completedAt),
+ )
+ val sets = if (ex.optJSONArray("sets") != null) ex.optJSONArray("sets")!! else (ex.optJSONArray("logs") ?: JSONArray())
+ for (sIdx in 0 until sets.length()) {
+ val set = sets.optJSONObject(sIdx) ?: continue
+ data.getJSONArray("workout_sets").put(
+ JSONObject()
+ .put("id", stableId("workout_set", set.optString("id"), sIdx + 1))
+ .put("workout_exercise_id", workoutExerciseId)
+ .put("set_index", sIdx + 1)
+ .put("weight", max(0.0, set.optDouble("weight", 0.0)))
+ .put("reps", max(0.0, set.optDouble("reps", 0.0)))
+ .put("rpe", if (set.has("rpe")) set.optDouble("rpe") else JSONObject.NULL)
+ .put("rir", if (set.has("rir")) set.optDouble("rir") else JSONObject.NULL)
+ .put("rest_seconds", max(0, set.optInt("restSeconds", set.optInt("rest", 0))))
+ .put("is_warmup", set.optBoolean("isWarmup", false))
+ .put("is_dropset", set.optBoolean("isDropset", false))
+ .put("is_amrap", set.optBoolean("isAmrap", set.optBoolean("isAMRAP", false)))
+ .put("to_failure", set.optBoolean("toFailure", false))
+ .put("completed_at", completedAt)
+ .put("created_at", startedAt)
+ .put("updated_at", completedAt),
+ )
+ }
+ }
+ }
+
+ (snapshot.optJSONArray("bodyWeight") ?: JSONArray()).forEachObject { row ->
+ bodyCounter++
+ val measuredAt = parseImportEpochMillis(
+ row.opt("measuredAt").takeUnless { it == null || it == JSONObject.NULL } ?: row.opt("date"),
+ now + bodyCounter,
+ )
+ data.getJSONArray("body_measurements").put(
+ JSONObject()
+ .put("id", stableId("body", row.optString("id"), bodyCounter))
+ .put("measured_at", measuredAt)
+ .put("bodyweight", row.optDouble("weight", row.optDouble("bodyweight", Double.NaN)).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("waist", JSONObject.NULL)
+ .put("chest", JSONObject.NULL)
+ .put("arm", JSONObject.NULL)
+ .put("thigh", JSONObject.NULL)
+ .put("notes", row.optString("notes"))
+ .put("created_at", measuredAt)
+ .put("updated_at", measuredAt),
+ )
+ }
+ (snapshot.optJSONArray("bodyMeasurements") ?: JSONArray()).forEachObject { row ->
+ bodyCounter++
+ val measuredAt = parseImportEpochMillis(
+ row.opt("measuredAt").takeUnless { it == null || it == JSONObject.NULL } ?: row.opt("date"),
+ now + bodyCounter,
+ )
+ data.getJSONArray("body_measurements").put(
+ JSONObject()
+ .put("id", stableId("body_measure", row.optString("id"), bodyCounter))
+ .put("measured_at", measuredAt)
+ .put("bodyweight", row.optDouble("bodyweight", Double.NaN).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("waist", row.optDouble("waist", Double.NaN).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("chest", row.optDouble("chest", Double.NaN).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("arm", row.optDouble("arm", Double.NaN).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("thigh", row.optDouble("thigh", Double.NaN).takeIf { it.isFinite() } ?: JSONObject.NULL)
+ .put("notes", row.optString("notes"))
+ .put("created_at", measuredAt)
+ .put("updated_at", measuredAt),
+ )
+ }
+
+ appState.keys().forEach { key ->
+ val value = appState.opt(key)
+ val type = when (value) {
+ is Boolean -> "boolean"
+ is Number -> "number"
+ is String -> "string"
+ else -> "json"
+ }
+ data.getJSONArray("app_settings").put(
+ JSONObject()
+ .put("id", "setting_$key")
+ .put("key", key)
+ .put("value", if (type == "json") JSONObject.wrap(value)?.toString().orEmpty() else value?.toString().orEmpty())
+ .put("value_type", type)
+ .put("updated_at", now),
+ )
+ }
+
+ return JSONObject()
+ .put("version", EXPORT_VERSION)
+ .put("type", EXPORT_TYPE)
+ .put("exportedAt", java.time.Instant.now().toString())
+ .put("data", data)
+ }
+
+ private fun extractLegacySnapshot(raw: JSONObject): Pair {
+ val schema = raw.optString("schema")
+ val isSqlite = schema.startsWith("IRONLOG_SQLITE_EXPORT_V") && raw.optJSONObject("payload") != null
+ if (isSqlite) {
+ return Pair(raw.optJSONObject("payload") ?: JSONObject(), raw.optJSONObject("appState") ?: JSONObject())
+ }
+ val root = if (raw.optJSONObject("payload") != null) raw.optJSONObject("payload")!! else raw
+ val snapshot = JSONObject()
+ .put("plans", legacyArray(root, raw, "plans", "ironlog_plans"))
+ .put("history", legacyArray(root, raw, "history", "ironlog_history"))
+ .put("bodyWeight", legacyArray(root, raw, "bodyWeight", "ironlog_bw"))
+ .put("bodyMeasurements", legacyArray(root, raw, "bodyMeasurements", "@ironlog/bodyMeasurements"))
+ .put("customExercises", legacyArray(root, raw, "customExercises", "@ironlog/customExercises"))
+ val appState = when {
+ raw.optJSONObject("appState") != null -> raw.optJSONObject("appState")!!
+ root.optJSONObject("settings") != null -> root.optJSONObject("settings")!!
+ else -> legacyDomainObject(raw, "ironlog_settings")
+ }
+ return Pair(snapshot, appState)
+ }
+
+ private fun legacyArray(root: JSONObject, raw: JSONObject, rootKey: String, domainKey: String): JSONArray {
+ val direct = root.opt(rootKey)
+ if (direct is JSONArray) return direct
+ if (direct is String) runCatching { JSONArray(direct) }.getOrNull()?.let { return it }
+ return legacyDomainItem(raw, domainKey) ?: JSONArray()
+ }
+
+ private fun legacyDomainObject(raw: JSONObject, key: String): JSONObject {
+ val domains = raw.optJSONObject("domains") ?: return JSONObject()
+ val names = domains.keys()
+ while (names.hasNext()) {
+ val d = domains.optJSONObject(names.next()) ?: continue
+ val items = d.optJSONObject("items") ?: continue
+ val v = items.opt(key) ?: continue
+ if (v is JSONObject) return v
+ if (v is String) {
+ runCatching { JSONObject(v) }.getOrNull()?.let { return it }
+ }
+ }
+ return JSONObject()
+ }
+
+ private fun legacyDomainItem(raw: JSONObject, key: String): JSONArray? {
+ val domains = raw.optJSONObject("domains") ?: return null
+ val names = domains.keys()
+ while (names.hasNext()) {
+ val d = domains.optJSONObject(names.next()) ?: continue
+ val items = d.optJSONObject("items") ?: continue
+ val v = items.opt(key) ?: continue
+ if (v is JSONArray) return v
+ if (v is String) {
+ runCatching { JSONArray(v) }.getOrNull()?.let { return it }
+ }
+ }
+ return null
+ }
+
+ private fun clearUserDataTables(clearExercises: Boolean) {
+ ObjectBox.store.boxFor(WorkoutSetEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(WorkoutEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(PlanExerciseEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(PlanDayEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(PlanEntity::class.java).removeAll()
+ if (clearExercises) {
+ ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(ExerciseEntity::class.java).removeAll()
+ }
+ ObjectBox.store.boxFor(BodyMeasurementEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(ProgressPhotoEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(AppSettingEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(AthleteCalibrationEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(GamificationProfileEntity::class.java).removeAll()
+ ObjectBox.store.boxFor(IronLedgerEventEntity::class.java).removeAll()
+ }
+
+ private fun importData(data: JSONObject, mergeSingletons: Boolean) {
+ val exercisesBox = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+ val exerciseMusclesBox = ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java)
+ val plansBox = ObjectBox.store.boxFor(PlanEntity::class.java)
+ val planDaysBox = ObjectBox.store.boxFor(PlanDayEntity::class.java)
+ val planExercisesBox = ObjectBox.store.boxFor(PlanExerciseEntity::class.java)
+ val workoutsBox = ObjectBox.store.boxFor(WorkoutEntity::class.java)
+ val workoutExercisesBox = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java)
+ val workoutSetsBox = ObjectBox.store.boxFor(WorkoutSetEntity::class.java)
+ val bodyBox = ObjectBox.store.boxFor(BodyMeasurementEntity::class.java)
+ val photosBox = ObjectBox.store.boxFor(ProgressPhotoEntity::class.java)
+ val settingsBox = ObjectBox.store.boxFor(AppSettingEntity::class.java)
+ val athleteCalibrationsBox = ObjectBox.store.boxFor(AthleteCalibrationEntity::class.java)
+ val gamificationProfilesBox = ObjectBox.store.boxFor(GamificationProfileEntity::class.java)
+ val ironLedgerEventsBox = ObjectBox.store.boxFor(IronLedgerEventEntity::class.java)
+
+ val planByUid = mutableMapOf()
+ val dayByUid = mutableMapOf()
+ val exerciseByUid = mutableMapOf()
+ val workoutByUid = mutableMapOf()
+ val workoutExerciseByUid = mutableMapOf()
+
+ (data.optJSONArray("exercises") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val row = ExerciseEntity().apply {
+ this.uid = uid
+ name = o.optString("name")
+ normalizedName = o.optString("normalized_name")
+ primaryMuscle = o.optString("primary_muscle")
+ equipment = o.optString("equipment")
+ category = o.optString("category", "strength")
+ isCustom = o.optBoolean("is_custom", false)
+ source = o.optString("source")
+ notes = o.optString("notes")
+ equipmentDetail = o.optNullableString("equipment_detail")
+ apparatusJson = o.optNullableString("apparatus_json")
+ trackingType = o.optNullableString("tracking_type")
+ isBodyweight = o.optBoolean("is_bodyweight", equipment.equals("bodyweight", true))
+ requiresExternalLoad = o.optBoolean("requires_external_load", false)
+ movementPattern = o.optNullableString("movement_pattern")
+ difficulty = o.optNullableString("difficulty")
+ aliasesJson = o.optNullableString("aliases_json")
+ sourceTagsJson = o.optNullableString("source_tags_json")
+ secondaryMusclesJson = o.optNullableString("secondary_muscles_json")
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ exercisesBox.query(ExerciseEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ exercisesBox.put(row)
+ exerciseByUid[row.uid] = row
+ }
+
+ (data.optJSONArray("exercise_muscles") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ val exerciseUid = o.optString("exercise_id").trim()
+ if (uid.isBlank() || exerciseUid.isBlank()) return@forEachObject
+ val row = ExerciseMuscleEntity().apply {
+ this.uid = uid
+ this.exerciseUid = exerciseUid
+ exerciseByUid[exerciseUid]?.let { exercise.target = it }
+ muscle = o.optString("muscle")
+ role = o.optString("role", "secondary")
+ contributionFraction = o.optDouble("contribution_fraction", 0.0)
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ exerciseMusclesBox.query(ExerciseMuscleEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ exerciseMusclesBox.put(row)
+ }
+
+ (data.optJSONArray("plans") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val row = PlanEntity().apply {
+ this.uid = uid
+ name = o.optString("name")
+ goal = o.optString("goal")
+ description = o.optString("description")
+ isActive = o.optBoolean("is_active", false)
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ plansBox.query(PlanEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ plansBox.put(row)
+ planByUid[row.uid] = row
+ }
+
+ (data.optJSONArray("plan_days") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val planUid = o.optString("plan_id")
+ val row = PlanDayEntity().apply {
+ this.uid = uid
+ this.planUid = planUid
+ planByUid[planUid]?.let { plan.target = it }
+ name = o.optString("name")
+ color = o.optString("color", "#FF4500")
+ orderIndex = o.optInt("order_index", 0)
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ planDaysBox.query(PlanDayEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ planDaysBox.put(row)
+ dayByUid[row.uid] = row
+ }
+
+ (data.optJSONArray("plan_exercises") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val dayUid = o.optString("plan_day_id")
+ val exerciseUid = o.optString("exercise_id")
+ val row = PlanExerciseEntity().apply {
+ this.uid = uid
+ this.planDayUid = dayUid
+ dayByUid[dayUid]?.let { planDay.target = it }
+ this.exerciseUid = exerciseUid
+ exerciseByUid[exerciseUid]?.let { exercise.target = it }
+ orderIndex = o.optInt("order_index", 0)
+ sets = max(1, o.optInt("sets", 1))
+ reps = o.optString("reps")
+ restSeconds = max(0, o.optInt("rest_seconds", 0))
+ supersetGroup = o.optString("superset_group")
+ isWarmup = o.optBoolean("is_warmup", false)
+ notes = o.optString("notes")
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ planExercisesBox.query(PlanExerciseEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ planExercisesBox.put(row)
+ }
+
+ (data.optJSONArray("workouts") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val planUid = o.optString("plan_id").ifBlank { null }
+ val dayUid = o.optString("plan_day_id").ifBlank { null }
+ val row = WorkoutEntity().apply {
+ this.uid = uid
+ this.planUid = planUid
+ planUid?.let { pu -> planByUid[pu]?.let { plan.target = it } }
+ this.planDayUid = dayUid
+ dayUid?.let { du -> dayByUid[du]?.let { planDay.target = it } }
+ name = o.optString("name")
+ startedAt = o.optLong("started_at", 0L)
+ completedAt = if (o.isNull("completed_at")) null else o.optLong("completed_at")
+ durationSeconds = o.optInt("duration_seconds", 0)
+ rating = if (o.isNull("rating")) null else o.optDouble("rating")
+ notes = o.optString("notes")
+ status = o.optString("status", "completed")
+ // New IronLog backups preserve provenance. Older/foreign payloads lack the
+ // field and are conservatively treated as imported proof.
+ imported = o.optBoolean("imported", true)
+ createdAt = o.optLong("created_at", startedAt)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ workoutsBox.query(WorkoutEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ workoutsBox.put(row)
+ workoutByUid[row.uid] = row
+ }
+
+ (data.optJSONArray("workout_exercises") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val workoutUid = o.optString("workout_id")
+ val exerciseUid = o.optString("exercise_id")
+ val row = WorkoutExerciseEntity().apply {
+ this.uid = uid
+ this.workoutUid = workoutUid
+ workoutByUid[workoutUid]?.let { workout.target = it }
+ this.exerciseUid = exerciseUid
+ exerciseByUid[exerciseUid]?.let { exercise.target = it }
+ orderIndex = o.optInt("order_index", 0)
+ supersetGroup = o.optString("superset_group")
+ notes = o.optString("notes")
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ workoutExercisesBox.query(WorkoutExerciseEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ workoutExercisesBox.put(row)
+ workoutExerciseByUid[row.uid] = row
+ }
+
+ (data.optJSONArray("workout_sets") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val workoutExerciseUid = o.optString("workout_exercise_id")
+ val row = WorkoutSetEntity().apply {
+ this.uid = uid
+ this.workoutExerciseUid = workoutExerciseUid
+ workoutExerciseByUid[workoutExerciseUid]?.let { workoutExercise.target = it }
+ setIndex = o.optInt("set_index", 1)
+ weight = o.optDouble("weight", 0.0)
+ reps = o.optDouble("reps", 0.0)
+ rpe = if (o.isNull("rpe")) null else o.optDouble("rpe")
+ rir = if (o.isNull("rir")) null else o.optDouble("rir")
+ restSeconds = o.optInt("rest_seconds", 0)
+ isWarmup = o.optBoolean("is_warmup", false)
+ isDropset = o.optBoolean("is_dropset", false)
+ isAmrap = o.optBoolean("is_amrap", false)
+ toFailure = o.optBoolean("to_failure", false)
+ completedAt = if (o.isNull("completed_at")) null else o.optLong("completed_at")
+ createdAt = o.optLong("created_at", 0L)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ workoutSetsBox.query(WorkoutSetEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ workoutSetsBox.put(row)
+ }
+
+ (data.optJSONArray("body_measurements") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val row = BodyMeasurementEntity().apply {
+ this.uid = uid
+ measuredAt = o.optLong("measured_at", 0L)
+ bodyweight = if (o.isNull("bodyweight")) null else o.optDouble("bodyweight")
+ waist = if (o.isNull("waist")) null else o.optDouble("waist")
+ chest = if (o.isNull("chest")) null else o.optDouble("chest")
+ arm = if (o.isNull("arm")) null else o.optDouble("arm")
+ thigh = if (o.isNull("thigh")) null else o.optDouble("thigh")
+ notes = o.optString("notes")
+ createdAt = o.optLong("created_at", measuredAt)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ bodyBox.query(BodyMeasurementEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ bodyBox.put(row)
+ }
+
+ (data.optJSONArray("progress_photos") ?: JSONArray()).forEachObject { o ->
+ val uid = o.optString("id").trim()
+ if (uid.isBlank()) return@forEachObject
+ val row = ProgressPhotoEntity().apply {
+ this.uid = uid
+ fileUri = o.optString("file_uri")
+ takenAt = o.optLong("taken_at", 0L)
+ bodyweight = if (o.isNull("bodyweight")) null else o.optDouble("bodyweight")
+ notes = o.optString("notes")
+ createdAt = o.optLong("created_at", takenAt)
+ updatedAt = o.optLong("updated_at", createdAt)
+ }
+ photosBox.query(ProgressPhotoEntity_.uid.equal(uid)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ photosBox.put(row)
+ }
+
+ (data.optJSONArray("app_settings") ?: JSONArray()).forEachObject { o ->
+ val key = o.optString("key").trim()
+ if (key.isBlank()) return@forEachObject
+ val row = AppSettingEntity().apply {
+ this.key = key
+ value = o.optString("value")
+ valueType = o.optString("value_type", "string")
+ updatedAt = o.optLong("updated_at", 0L)
+ }
+ settingsBox.query(AppSettingEntity_.key.equal(key)).build().use { q ->
+ q.findFirst()?.let { row.objectBoxId = it.objectBoxId }
+ }
+ settingsBox.put(row)
+ }
+
+ (data.optJSONArray("athlete_calibrations") ?: JSONArray()).forEachObject { o ->
+ val offlineUserId = "local"
+ val row = AthleteCalibrationEntity().apply {
+ this.offlineUserId = offlineUserId
+ trainingAgeMonths = o.optInt("training_age_months", 0)
+ historicalTrainingDaysPerWeek = o.optInt("historical_training_days_per_week", 3).coerceIn(1, 7)
+ firstVerifiedSessionAt = o.optLong("first_verified_session_at", 0L)
+ weightUnit = o.optString("weight_unit", "kg")
+ bodyweightKg = if (o.isNull("bodyweight_kg")) null else o.optDouble("bodyweight_kg")
+ goalMode = o.optString("goal_mode", "hypertrophy")
+ weeklyGoalDays = o.optInt("weekly_goal_days", 4)
+ importedHistory = o.optBoolean("imported_history", false)
+ confidence = o.optDouble("confidence", 0.5)
+ updatedAt = o.optLong("updated_at", 0L)
+ hasPastTraining = o.optBoolean("has_past_training", false)
+ hasGymAccess = o.optBoolean("has_gym_access", true)
+ baselinePushups = o.optInt("baseline_pushups", 0)
+ baselinePullups = o.optInt("baseline_pullups", 0)
+ baselineBenchKg = o.optInt("baseline_bench_kg", 0)
+ baselineLatPulldownKg = o.optInt("baseline_lat_pulldown_kg", 0)
+ baselineMileRunSeconds = o.optInt("baseline_mile_run_seconds", 0)
+ }
+ athleteCalibrationsBox.query(AthleteCalibrationEntity_.offlineUserId.equal(offlineUserId)).build().use { q ->
+ q.findFirst()?.let { existing ->
+ row.id = existing.id
+ if (mergeSingletons) {
+ row.trainingAgeMonths = maxOf(row.trainingAgeMonths, existing.trainingAgeMonths)
+ row.historicalTrainingDaysPerWeek = existing.historicalTrainingDaysPerWeek.takeIf { it in 1..7 }
+ ?: row.historicalTrainingDaysPerWeek
+ row.firstVerifiedSessionAt = listOf(row.firstVerifiedSessionAt, existing.firstVerifiedSessionAt)
+ .filter { it > 0L }.minOrNull() ?: 0L
+ row.weightUnit = existing.weightUnit
+ row.bodyweightKg = existing.bodyweightKg ?: row.bodyweightKg
+ row.goalMode = existing.goalMode
+ row.weeklyGoalDays = existing.weeklyGoalDays
+ row.importedHistory = row.importedHistory || existing.importedHistory
+ row.confidence = maxOf(row.confidence, existing.confidence)
+ row.updatedAt = maxOf(row.updatedAt, existing.updatedAt)
+ row.hasPastTraining = row.hasPastTraining || existing.hasPastTraining
+ row.hasGymAccess = existing.hasGymAccess
+ row.baselinePushups = maxOf(row.baselinePushups, existing.baselinePushups)
+ row.baselinePullups = maxOf(row.baselinePullups, existing.baselinePullups)
+ row.baselineBenchKg = maxOf(row.baselineBenchKg, existing.baselineBenchKg)
+ row.baselineLatPulldownKg = maxOf(row.baselineLatPulldownKg, existing.baselineLatPulldownKg)
+ row.baselineMileRunSeconds = maxOf(row.baselineMileRunSeconds, existing.baselineMileRunSeconds)
+ }
+ }
+ }
+ athleteCalibrationsBox.put(row)
+ }
+
+ (data.optJSONArray("gamification_profiles") ?: JSONArray()).forEachObject { o ->
+ val offlineUserId = "local"
+ val row = GamificationProfileEntity().apply {
+ this.offlineUserId = offlineUserId
+ totalXp = o.optLong("total_xp", 0L)
+ level = o.optInt("level", 1)
+ xpInLevel = o.optLong("xp_in_level", 0L)
+ rank = o.optString("rank", "E")
+ activeTitle = o.optString("active_title", "Ledger Initiate")
+ statsJson = o.optString("stats_json", "{}")
+ weeklyXp = o.optInt("weekly_xp", 0)
+ weeklyXpResetWeek = o.optString("weekly_xp_reset_week")
+ streakWeeks = o.optInt("streak_weeks", 0)
+ makeupCompletionsJson = o.optString(
+ "recovery_circuit_completions_json",
+ o.optString("makeup_completions_json", "{}"),
+ )
+ unlockedBadges = o.optString("unlocked_badges")
+ }
+ gamificationProfilesBox.query(GamificationProfileEntity_.offlineUserId.equal(offlineUserId)).build().use { q ->
+ q.findFirst()?.let { existing ->
+ row.id = existing.id
+ if (mergeSingletons) {
+ val importedWins = row.totalXp >= existing.totalXp
+ row.totalXp = maxOf(row.totalXp, existing.totalXp)
+ row.level = maxOf(row.level, existing.level)
+ if (!importedWins) {
+ row.xpInLevel = existing.xpInLevel
+ row.rank = existing.rank
+ row.activeTitle = existing.activeTitle
+ row.statsJson = existing.statsJson
+ }
+ row.weeklyXp = maxOf(row.weeklyXp, existing.weeklyXp)
+ if (existing.weeklyXpResetWeek > row.weeklyXpResetWeek) {
+ row.weeklyXpResetWeek = existing.weeklyXpResetWeek
+ }
+ row.streakWeeks = maxOf(row.streakWeeks, existing.streakWeeks)
+ row.makeupCompletionsJson = mergeIntJsonMaps(
+ existing.makeupCompletionsJson,
+ row.makeupCompletionsJson,
+ )
+ row.unlockedBadges = (existing.unlockedBadges.split(',') + row.unlockedBadges.split(','))
+ .map(String::trim)
+ .filter(String::isNotEmpty)
+ .distinct()
+ .joinToString(",")
+ }
+ }
+ }
+ gamificationProfilesBox.put(row)
+ }
+
+ (data.optJSONArray("iron_ledger_events") ?: JSONArray()).forEachObject { o ->
+ val eventId = o.optString("event_id").trim()
+ if (eventId.isBlank()) return@forEachObject
+ val row = IronLedgerEventEntity().apply {
+ this.eventId = eventId
+ sourceType = o.optString("source_type")
+ sourceId = o.optString("source_id")
+ eventKind = o.optString("event_kind")
+ occurredAt = o.optLong("occurred_at", 0L)
+ xpDelta = o.optInt("xp_delta", 0)
+ statDeltasJson = o.optString("stat_deltas_json", "{}")
+ trustScore = o.optDouble("trust_score", 1.0)
+ fingerprint = o.optString("fingerprint")
+ metadataJson = o.optString("metadata_json", "{}")
+ invalidated = o.optBoolean("invalidated", false)
+ }
+ ironLedgerEventsBox.query(IronLedgerEventEntity_.eventId.equal(eventId)).build().use { q ->
+ q.findFirst()?.let { row.id = it.id }
+ }
+ ironLedgerEventsBox.put(row)
+ }
+
+ // keep seed flag for first app open consistency after restore
+ ObjectBox.store.boxFor(AppSettingEntity::class.java).query(AppSettingEntity_.key.equal("exercise_seed_complete")).build().use { q ->
+ if (q.findFirst() == null) {
+ ObjectBox.store.boxFor(AppSettingEntity::class.java).put(AppSettingEntity().apply {
+ key = "exercise_seed_complete"
+ value = "true"
+ valueType = "boolean"
+ updatedAt = System.currentTimeMillis()
+ })
+ }
+ }
+ }
+}
+
+internal fun backfillMissingAthleteStateRows(
+ data: JSONObject,
+ nowMs: Long = System.currentTimeMillis(),
+) {
+ val settingsRows = data.optJSONArray("app_settings") ?: JSONArray()
+ val calibrationRows = data.optJSONArray("athlete_calibrations") ?: JSONArray().also { data.put("athlete_calibrations", it) }
+ val profileRows = data.optJSONArray("gamification_profiles") ?: JSONArray().also { data.put("gamification_profiles", it) }
+ if (calibrationRows.length() > 0 && profileRows.length() > 0) return
+
+ val settings = linkedMapOf>()
+ for (i in 0 until settingsRows.length()) {
+ val row = settingsRows.optJSONObject(i) ?: continue
+ val key = row.optString("key").trim()
+ if (key.isBlank()) continue
+ settings[key] = row.optString("value") to row.optString("value_type", "string")
+ }
+ fun stringSetting(key: String): String? = settings[key]?.first?.takeIf { it.isNotBlank() }
+
+ if (calibrationRows.length() == 0) {
+ val calibration = deriveFallbackAthleteCalibration(settings, data.optJSONArray("workouts")?.length()?.let { it > 0 } == true, nowMs)
+ calibrationRows.put(
+ JSONObject()
+ .put("offline_user_id", calibration.offlineUserId)
+ .put("training_age_months", calibration.trainingAgeMonths)
+ .put("historical_training_days_per_week", calibration.historicalTrainingDaysPerWeek)
+ .put("first_verified_session_at", calibration.firstVerifiedSessionAt)
+ .put("weight_unit", calibration.weightUnit)
+ .put("bodyweight_kg", calibration.bodyweightKg ?: JSONObject.NULL)
+ .put("goal_mode", calibration.goalMode)
+ .put("weekly_goal_days", calibration.weeklyGoalDays)
+ .put("imported_history", calibration.importedHistory)
+ .put("confidence", calibration.confidence)
+ .put("updated_at", calibration.updatedAt)
+ .put("has_past_training", calibration.hasPastTraining)
+ .put("has_gym_access", calibration.hasGymAccess)
+ .put("baseline_pushups", calibration.baselinePushups)
+ .put("baseline_pullups", calibration.baselinePullups)
+ .put("baseline_bench_kg", calibration.baselineBenchKg)
+ .put("baseline_lat_pulldown_kg", calibration.baselineLatPulldownKg)
+ .put("baseline_mile_run_seconds", calibration.baselineMileRunSeconds)
+ )
+ }
+ if (profileRows.length() == 0) {
+ val profile = fallbackGamificationProfileRow()
+ profileRows.put(
+ JSONObject()
+ .put("offline_user_id", profile.offlineUserId)
+ .put("total_xp", profile.totalXp)
+ .put("level", profile.level)
+ .put("xp_in_level", profile.xpInLevel)
+ .put("rank", profile.rank)
+ .put("active_title", profile.activeTitle)
+ .put("stats_json", profile.statsJson)
+ .put("weekly_xp", profile.weeklyXp)
+ .put("weekly_xp_reset_week", profile.weeklyXpResetWeek)
+ .put("streak_weeks", profile.streakWeeks)
+ .put("recovery_circuit_completions_json", profile.recoveryCircuitCompletionsJson)
+ .put("unlocked_badges", profile.unlockedBadges)
+ )
+ }
+}
+
+internal data class FallbackAthleteCalibrationRow(
+ val offlineUserId: String = "local",
+ val trainingAgeMonths: Int,
+ val historicalTrainingDaysPerWeek: Int,
+ val firstVerifiedSessionAt: Long,
+ val weightUnit: String,
+ val bodyweightKg: Double?,
+ val goalMode: String,
+ val weeklyGoalDays: Int,
+ val importedHistory: Boolean,
+ val confidence: Double,
+ val updatedAt: Long,
+ val hasPastTraining: Boolean,
+ val hasGymAccess: Boolean,
+ val baselinePushups: Int,
+ val baselinePullups: Int,
+ val baselineBenchKg: Int,
+ val baselineLatPulldownKg: Int,
+ val baselineMileRunSeconds: Int,
+)
+
+internal data class FallbackGamificationProfileRow(
+ val offlineUserId: String = "local",
+ val totalXp: Long = 0L,
+ val level: Int = 1,
+ val xpInLevel: Long = 0L,
+ val rank: String = "E",
+ val activeTitle: String = "Ledger Initiate",
+ val statsJson: String = "{}",
+ val weeklyXp: Int = 0,
+ val weeklyXpResetWeek: String = "",
+ val streakWeeks: Int = 0,
+ val recoveryCircuitCompletionsJson: String = "{}",
+ val unlockedBadges: String = "",
+)
+
+internal fun deriveFallbackAthleteCalibration(
+ settings: Map>,
+ hasImportedWorkouts: Boolean,
+ nowMs: Long = System.currentTimeMillis(),
+): FallbackAthleteCalibrationRow {
+ fun stringSetting(key: String): String? = settings[key]?.first?.takeIf { it.isNotBlank() }
+ fun intSetting(key: String, default: Int = 0): Int = stringSetting(key)?.toIntOrNull() ?: default
+ fun longSetting(key: String, default: Long = 0L): Long = stringSetting(key)?.toLongOrNull() ?: default
+ fun doubleSetting(key: String): Double? = stringSetting(key)?.toDoubleOrNull()
+ fun booleanSetting(key: String, default: Boolean = false): Boolean = stringSetting(key)?.equals("true", ignoreCase = true) ?: default
+
+ return FallbackAthleteCalibrationRow(
+ trainingAgeMonths = intSetting("baseline_training_age_months"),
+ historicalTrainingDaysPerWeek = intSetting("baseline_historical_training_days_per_week", 3).coerceIn(1, 7),
+ firstVerifiedSessionAt = longSetting("first_verified_session_at", 0L),
+ weightUnit = stringSetting("weightUnit") ?: "kg",
+ bodyweightKg = doubleSetting("baseline_bodyweight_kg"),
+ goalMode = stringSetting("goalMode") ?: "hypertrophy",
+ weeklyGoalDays = intSetting("weeklyGoalDays", 4).coerceIn(1, 7),
+ importedHistory = booleanSetting("ledger_imported_history", hasImportedWorkouts),
+ confidence = 0.5,
+ updatedAt = nowMs,
+ hasPastTraining = booleanSetting("baseline_has_past_training"),
+ hasGymAccess = booleanSetting("baseline_has_gym_access", true),
+ baselinePushups = intSetting("baseline_pushups"),
+ baselinePullups = intSetting("baseline_pullups"),
+ baselineBenchKg = intSetting("baseline_bench_kg"),
+ baselineLatPulldownKg = intSetting("baseline_lat_pulldown_kg"),
+ baselineMileRunSeconds = intSetting("baseline_mile_run_seconds"),
+ )
+}
+
+internal fun fallbackGamificationProfileRow(): FallbackGamificationProfileRow = FallbackGamificationProfileRow()
+
+private fun JSONArray.forEachObject(block: (JSONObject) -> Unit) {
+ for (i in 0 until length()) {
+ val o = optJSONObject(i) ?: continue
+ block(o)
+ }
+}
+
+private fun JSONObject.optNullableString(key: String): String? =
+ if (!has(key) || isNull(key)) null else optString(key).takeIf { it.isNotBlank() }
+
+private fun mergeIntJsonMaps(first: String, second: String): String {
+ val merged = linkedMapOf()
+ listOf(first, second).forEach { raw ->
+ val json = runCatching { JSONObject(raw) }.getOrNull() ?: return@forEach
+ json.keys().forEach { key ->
+ merged[key] = maxOf(merged[key] ?: 0, json.optInt(key, 0))
+ }
+ }
+ return JSONObject(merged as Map<*, *>).toString()
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/ObjectBoxFlow.kt b/app/src/main/java/com/ironlog/app/data/repository/ObjectBoxFlow.kt
new file mode 100644
index 0000000..90369f2
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/ObjectBoxFlow.kt
@@ -0,0 +1,14 @@
+package com.ironlog.app.data.repository
+
+import io.objectbox.query.Query
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.callbackFlow
+
+fun Query.asFlow(): Flow> = callbackFlow {
+ val subscription = subscribe().observer { data ->
+ trySend(data)
+ Unit
+ }
+ awaitClose { subscription.cancel() }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/PlanRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/PlanRepository.kt
new file mode 100644
index 0000000..c4030f5
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/PlanRepository.kt
@@ -0,0 +1,413 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.model.FullPlanObject
+import com.ironlog.app.data.model.PlanBundle
+import com.ironlog.app.data.model.PlanDayInput
+import com.ironlog.app.data.model.PlanExerciseInput
+import com.ironlog.app.data.model.PlanInput
+import com.ironlog.app.data.model.PlanSnapshot
+import com.ironlog.app.data.model.WorkoutPerformedExercise
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.PlanDayEntity
+import com.ironlog.app.data.objectbox.PlanDayEntity_
+import com.ironlog.app.data.objectbox.PlanEntity
+import com.ironlog.app.data.objectbox.PlanEntity_
+import com.ironlog.app.data.objectbox.PlanExerciseEntity
+import com.ironlog.app.data.objectbox.PlanExerciseEntity_
+import com.ironlog.app.util.requireNonEmpty
+import com.ironlog.app.util.requireNumberMin
+import com.ironlog.app.util.FuzzyExerciseMapper
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
+import kotlin.math.max
+import kotlin.math.roundToInt
+
+class PlanRepository {
+ private val plansBox get() = ObjectBox.store.boxFor(PlanEntity::class.java)
+ private val daysBox get() = ObjectBox.store.boxFor(PlanDayEntity::class.java)
+ private val planExercisesBox get() = ObjectBox.store.boxFor(PlanExerciseEntity::class.java)
+ private val exercisesBox get() = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+
+ suspend fun createPlan(input: PlanInput): PlanEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(input.name, "name")
+ requireNonEmpty(input.goal, "goal")
+ val now = System.currentTimeMillis()
+ // Auto-activate the plan if it's the first one, or if the caller says so.
+ val noActivePlanExists = plansBox.query(PlanEntity_.isActive.equal(true)).build().use { it.count() == 0L }
+ val created = PlanEntity().apply {
+ name = input.name!!.trim()
+ goal = input.goal!!.trim()
+ description = input.description?.toString() ?: ""
+ isActive = input.isActive == true || noActivePlanExists
+ createdAt = now
+ updatedAt = now
+ }
+ plansBox.put(created)
+ created
+ }
+
+ suspend fun updatePlan(planId: String, input: PlanInput): PlanEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(planId, "planId")
+ val plan = findPlanByUidOrThrow(planId)
+ if (!input.name.isNullOrEmpty()) plan.name = input.name.trim()
+ if (!input.goal.isNullOrEmpty()) plan.goal = input.goal.trim()
+ if (input.description != null) plan.description = input.description.ifEmpty { "" }
+ if (input.isActive != null) plan.isActive = input.isActive
+ plan.updatedAt = System.currentTimeMillis()
+ plansBox.put(plan)
+ plan
+ }
+
+ suspend fun deletePlan(planId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(planId, "planId")
+ val plan = findPlanByUidOrThrow(planId)
+ val days = getPlanDaysSnapshot(planId)
+ val dayIds = days.map { it.uid }
+ val exercises = if (dayIds.isEmpty()) emptyList() else {
+ planExercisesBox.query(PlanExerciseEntity_.planDayUid.oneOf(dayIds.toTypedArray()))
+ .build().use { it.find() }
+ }
+ planExercisesBox.remove(exercises)
+ daysBox.remove(days)
+ plansBox.remove(plan)
+ Unit
+ }
+
+ fun getPlansFlow(): Flow> =
+ plansBox.query().orderDesc(PlanEntity_.updatedAt).build().asFlow()
+
+ suspend fun ensureActivePlanIfNeeded(): PlanEntity? = withContext(Dispatchers.IO) {
+ val plans = plansBox.query().orderDesc(PlanEntity_.updatedAt).build().use { it.find() }
+ if (plans.isEmpty()) return@withContext null
+
+ val selected = plans.firstOrNull { it.isActive } ?: plans.first()
+ var changed = false
+ plans.forEach { plan ->
+ val shouldBeActive = plan.uid == selected.uid
+ if (plan.isActive != shouldBeActive) {
+ plan.isActive = shouldBeActive
+ changed = true
+ }
+ }
+ if (changed) plansBox.put(plans)
+ selected
+ }
+
+ fun getPlanFlow(planId: String): Flow> {
+ requireNonEmpty(planId, "planId")
+ return plansBox.query(PlanEntity_.uid.equal(planId)).build().asFlow()
+ }
+
+ fun getPlanDaysFlow(planId: String): Flow> {
+ requireNonEmpty(planId, "planId")
+ return daysBox.query(PlanDayEntity_.planUid.equal(planId)).order(PlanDayEntity_.orderIndex).build().asFlow()
+ }
+
+ fun getPlanExercisesFlow(planDayId: String): Flow> {
+ requireNonEmpty(planDayId, "planDayId")
+ return planExercisesBox.query(PlanExerciseEntity_.planDayUid.equal(planDayId)).order(PlanExerciseEntity_.orderIndex).build().asFlow()
+ }
+
+ fun getPlanBundleFlow(planId: String, activeDayId: String? = null): Flow {
+ requireNonEmpty(planId, "planId")
+ return combine(getPlanFlow(planId), getPlanDaysFlow(planId)) { planRows, days ->
+ val plan = planRows.firstOrNull() ?: error("Plan not found: $planId")
+ PlanBundle(plan, days, activeDayId ?: days.firstOrNull()?.uid)
+ }
+ }
+
+ suspend fun getPlanById(planId: String): PlanSnapshot = withContext(Dispatchers.IO) {
+ requireNonEmpty(planId, "planId")
+ val plan = findPlanByUidOrThrow(planId)
+ val days = getPlanDaysSnapshot(planId)
+ val dayIds = days.map { it.uid }.toSet()
+ val exercises = if (dayIds.isEmpty()) emptyList() else {
+ planExercisesBox.query(PlanExerciseEntity_.planDayUid.oneOf(dayIds.toTypedArray()))
+ .order(PlanExerciseEntity_.orderIndex)
+ .build().use { it.find() }
+ }
+ PlanSnapshot(plan, days, exercises)
+ }
+
+ suspend fun createPlanDay(planId: String, input: PlanDayInput): PlanDayEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(planId, "planId")
+ requireNonEmpty(input.name, "name")
+ val plan = findPlanByUidOrThrow(planId)
+ val now = System.currentTimeMillis()
+ val count = getPlanDaysSnapshot(planId).size
+ val created = PlanDayEntity().apply {
+ this.plan.target = plan
+ planUid = plan.uid
+ name = input.name!!.trim()
+ color = input.color ?: "#FF4500"
+ orderIndex = input.orderIndex ?: count
+ createdAt = now
+ updatedAt = now
+ }
+ daysBox.put(created)
+ created
+ }
+
+ suspend fun updatePlanDay(dayId: String, input: PlanDayInput): PlanDayEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(dayId, "dayId")
+ val day = findDayByUidOrThrow(dayId)
+ if (!input.name.isNullOrEmpty()) day.name = input.name.trim()
+ if (!input.color.isNullOrEmpty()) day.color = input.color
+ if (input.orderIndex != null) day.orderIndex = input.orderIndex
+ day.updatedAt = System.currentTimeMillis()
+ daysBox.put(day)
+ day
+ }
+
+ suspend fun deletePlanDay(dayId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(dayId, "dayId")
+ val day = findDayByUidOrThrow(dayId)
+ val exercises = getPlanExercisesSnapshot(dayId)
+ planExercisesBox.remove(exercises)
+ daysBox.remove(day)
+ Unit
+ }
+
+ suspend fun addExerciseToPlanDay(dayId: String, input: PlanExerciseInput): PlanExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(dayId, "dayId")
+ requireNonEmpty(input.exerciseId, "exerciseId")
+ requireNumberMin(input.sets ?: 1, 1.0, "sets")
+ requireNonEmpty(input.reps, "reps")
+ requireNumberMin(input.restSeconds ?: 0, 0.0, "restSeconds")
+ val day = findDayByUidOrThrow(dayId)
+ val exercise = findExerciseByUidOrThrow(input.exerciseId!!)
+ val now = System.currentTimeMillis()
+ val count = getPlanExercisesSnapshot(dayId).size
+ val created = PlanExerciseEntity().apply {
+ planDay.target = day
+ planDayUid = day.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = input.orderIndex ?: count
+ sets = input.sets ?: 1
+ reps = input.reps!!.trim()
+ restSeconds = input.restSeconds ?: 0
+ supersetGroup = input.supersetGroup?.toString() ?: ""
+ isWarmup = input.isWarmup == true
+ notes = input.notes?.toString() ?: ""
+ createdAt = now
+ updatedAt = now
+ }
+ planExercisesBox.put(created)
+ created
+ }
+
+ suspend fun updatePlanExercise(planExerciseId: String, input: PlanExerciseInput): PlanExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(planExerciseId, "planExerciseId")
+ val row = findPlanExerciseByUidOrThrow(planExerciseId)
+ if (!input.exerciseId.isNullOrEmpty()) {
+ val ex = findExerciseByUidOrThrow(input.exerciseId)
+ row.exercise.target = ex
+ row.exerciseUid = ex.uid
+ }
+ if (input.orderIndex != null) row.orderIndex = input.orderIndex
+ if (input.sets != null) row.sets = input.sets
+ if (input.reps != null) row.reps = input.reps
+ if (input.restSeconds != null) row.restSeconds = input.restSeconds
+ if (input.supersetGroup != null) row.supersetGroup = input.supersetGroup.ifEmpty { "" }
+ if (input.isWarmup != null) row.isWarmup = input.isWarmup
+ if (input.notes != null) row.notes = input.notes.ifEmpty { "" }
+ row.updatedAt = System.currentTimeMillis()
+ planExercisesBox.put(row)
+ row
+ }
+
+ suspend fun removePlanExercise(planExerciseId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(planExerciseId, "planExerciseId")
+ planExercisesBox.remove(findPlanExerciseByUidOrThrow(planExerciseId))
+ Unit
+ }
+
+ suspend fun syncPlanDayFromWorkout(dayId: String, exerciseData: List) = withContext(Dispatchers.IO) {
+ requireNonEmpty(dayId, "dayId")
+ val day = findDayByUidOrThrow(dayId)
+ val now = System.currentTimeMillis()
+ val existing = getPlanExercisesSnapshot(dayId)
+ planExercisesBox.remove(existing)
+
+ val creates = mutableListOf()
+ var order = 0
+ for (ex in exerciseData) {
+ val exerciseId = ex.exerciseId ?: continue
+ val exercise = findExerciseByUidOrNull(exerciseId) ?: continue
+ val workSets = ex.sets.orEmpty().filter { it.isWarmup != true && it.type != "warmup" }
+ val setCount = workSets.size.takeIf { it > 0 } ?: 1
+ val avgReps = if (workSets.isNotEmpty()) {
+ (workSets.sumOf { it.reps ?: 0.0 } / workSets.size).roundToInt()
+ } else {
+ when (val pr = ex.prescribedReps) {
+ is Number -> pr.toInt()
+ is String -> pr.toIntOrNull() ?: 8
+ else -> 8
+ }
+ }
+ val restValues = workSets.map { (it.restSeconds ?: it.rest ?: 0) }.filter { it > 0 }
+ val avgRestSeconds = if (restValues.isNotEmpty()) max(0, restValues.average().roundToInt()) else 90
+ creates += PlanExerciseEntity().apply {
+ planDay.target = day
+ planDayUid = day.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = order
+ sets = setCount
+ reps = (avgReps.takeIf { it != 0 } ?: 8).toString()
+ restSeconds = avgRestSeconds
+ supersetGroup = ""
+ isWarmup = false
+ notes = ""
+ createdAt = now
+ updatedAt = now
+ }
+ order++
+ }
+ if (creates.isNotEmpty()) planExercisesBox.put(creates)
+ }
+
+ suspend fun reorderPlanExercises(dayId: String, orderedIds: List) = withContext(Dispatchers.IO) {
+ requireNonEmpty(dayId, "dayId")
+ val rowMap = getPlanExercisesSnapshot(dayId).associateBy { it.uid }
+ val now = System.currentTimeMillis()
+ val toUpdate = mutableListOf()
+ orderedIds.forEachIndexed { index, id ->
+ val row = rowMap[id] ?: return@forEachIndexed
+ row.orderIndex = index
+ row.updatedAt = now
+ toUpdate.add(row)
+ }
+ if (toUpdate.isNotEmpty()) planExercisesBox.put(toUpdate)
+ }
+
+ suspend fun importFullPlan(planObject: FullPlanObject): PlanEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(planObject.name, "plan name")
+ val now = System.currentTimeMillis()
+ val mapper = FuzzyExerciseMapper(exercisesBox.all)
+ val shouldActivate = plansBox.query(PlanEntity_.isActive.equal(true)).build().use { it.count() == 0L }
+
+ val resolvedDays = planObject.days.mapIndexed { index, day ->
+ val resolved = day.exercises.map { ex -> ex to resolveExerciseId(ex, mapper) }
+ Triple(day, index, resolved)
+ }
+
+ val wmPlan = PlanEntity().apply {
+ name = planObject.name!!.trim()
+ goal = (planObject.goal ?: "General Fitness").trim()
+ description = (planObject.description ?: "").trim()
+ isActive = shouldActivate
+ createdAt = now
+ updatedAt = now
+ }
+ plansBox.put(wmPlan)
+
+ for ((day, index, resolvedExercises) in resolvedDays) {
+ val wmDay = PlanDayEntity().apply {
+ plan.target = wmPlan
+ planUid = wmPlan.uid
+ name = (day.name ?: "Day ${index + 1}").trim()
+ color = day.color ?: "#FF4500"
+ orderIndex = index
+ createdAt = now
+ updatedAt = now
+ }
+ daysBox.put(wmDay)
+ var exOrder = 0
+ for ((ex, resolvedId) in resolvedExercises) {
+ val exercise = resolvedId?.let(::findExerciseByUidOrNull) ?: continue
+ val row = PlanExerciseEntity().apply {
+ planDay.target = wmDay
+ planDayUid = wmDay.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = exOrder
+ sets = ex.sets ?: 3
+ reps = (ex.reps ?: "8-12").trim()
+ restSeconds = ex.restSeconds ?: 90
+ supersetGroup = ex.supersetGroup ?: ""
+ isWarmup = ex.isWarmup == true
+ notes = ex.notes ?: ""
+ createdAt = now
+ updatedAt = now
+ }
+ planExercisesBox.put(row)
+ exOrder++
+ }
+ }
+ wmPlan
+ }
+
+ suspend fun reorderPlans(orderedIds: List) = withContext(Dispatchers.IO) {
+ val rowMap = plansBox.all.associateBy { it.uid }
+ val now = System.currentTimeMillis()
+ val toUpdate = mutableListOf()
+ orderedIds.forEachIndexed { index, id ->
+ val row = rowMap[id] ?: return@forEachIndexed
+ // updatedAt ordering: first item gets highest value so orderDesc puts it first.
+ row.updatedAt = now - (index * 1000L)
+ // Explicitly mark the top plan as active so that after a restart
+ // firstOrNull { it.isActive } reliably picks the right plan instead
+ // of relying on the fragile updatedAt ordering heuristic.
+ row.isActive = (index == 0)
+ toUpdate.add(row)
+ }
+ if (toUpdate.isNotEmpty()) plansBox.put(toUpdate)
+ }
+
+ suspend fun replaceAllPlans(nextPlans: List = emptyList()) = withContext(Dispatchers.IO) {
+ val exerciseRows = planExercisesBox.all
+ val dayRows = daysBox.all
+ val planRows = plansBox.all
+ if (exerciseRows.isNotEmpty()) planExercisesBox.remove(exerciseRows)
+ if (dayRows.isNotEmpty()) daysBox.remove(dayRows)
+ if (planRows.isNotEmpty()) plansBox.remove(planRows)
+ nextPlans.forEach { plan ->
+ importFullPlan(
+ FullPlanObject(
+ name = plan.name ?: "Plan",
+ goal = plan.goal ?: "General Fitness",
+ description = plan.description ?: "",
+ days = plan.days,
+ )
+ )
+ }
+ }
+
+ private fun resolveExerciseId(ex: PlanExerciseInput, mapper: FuzzyExerciseMapper? = null): String? {
+ ex.exerciseId?.let { if (findExerciseByUidOrNull(it) != null) return it }
+ ex.name?.let { name ->
+ val exact = exercisesBox.query(ExerciseEntity_.name.equal(name)).build().use { q -> q.findFirst()?.let { it.uid } }
+ if (exact != null) return exact
+ return mapper?.match(name)
+ }
+ return null
+ }
+
+ internal fun getPlanDaysSnapshot(planId: String): List =
+ daysBox.query(PlanDayEntity_.planUid.equal(planId)).order(PlanDayEntity_.orderIndex).build().use { it.find() }
+
+ internal fun getPlanExercisesSnapshot(dayId: String): List =
+ planExercisesBox.query(PlanExerciseEntity_.planDayUid.equal(dayId)).order(PlanExerciseEntity_.orderIndex).build().use { it.find() }
+
+ internal fun findPlanByUidOrThrow(uid: String): PlanEntity =
+ plansBox.query(PlanEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Plan not found: $uid")
+
+ internal fun findDayByUidOrThrow(uid: String): PlanDayEntity =
+ daysBox.query(PlanDayEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Plan day not found: $uid")
+
+ internal fun findPlanExerciseByUidOrThrow(uid: String): PlanExerciseEntity =
+ planExercisesBox.query(PlanExerciseEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Plan exercise not found: $uid")
+
+ private fun findExerciseByUidOrThrow(uid: String): ExerciseEntity =
+ findExerciseByUidOrNull(uid) ?: error("Exercise not found: $uid")
+
+ private fun findExerciseByUidOrNull(uid: String): ExerciseEntity? =
+ exercisesBox.query(ExerciseEntity_.uid.equal(uid)).build().use { it.findFirst() }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/SettingsRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/SettingsRepository.kt
new file mode 100644
index 0000000..6f39a97
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/SettingsRepository.kt
@@ -0,0 +1,165 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.objectbox.AppSettingEntity
+import com.ironlog.app.data.objectbox.AppSettingEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import io.objectbox.Box
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonPrimitive
+import kotlinx.serialization.json.buildJsonArray
+import kotlinx.serialization.json.booleanOrNull
+import kotlinx.serialization.json.doubleOrNull
+import kotlinx.serialization.json.jsonArray
+import kotlinx.serialization.json.jsonPrimitive
+
+/** Translation of settingsRepository.js. */
+class SettingsRepository(
+ private val settingsBox: Box = ObjectBox.store.boxFor(AppSettingEntity::class.java),
+ private val json: Json = Json { ignoreUnknownKeys = true },
+) {
+ private fun findSettingRow(key: String): AppSettingEntity? =
+ settingsBox.query(AppSettingEntity_.key.equal(key)).build().use { it.findFirst() }
+
+ suspend fun getSetting(key: String): Any? = withContext(Dispatchers.IO) {
+ require(key.isNotBlank()) { "key must not be empty" }
+ val row = findSettingRow(key) ?: return@withContext null
+ when (row.valueType) {
+ "number" -> row.value.toDoubleOrNull()
+ "boolean" -> row.value == "true"
+ "json" -> runCatching { json.parseToJsonElement(row.value) }.getOrNull()
+ else -> row.value
+ }
+ }
+
+ suspend fun getSettingJson(key: String): JsonElement? = getSetting(key) as? JsonElement
+ suspend fun getSettingString(key: String): String? = getSetting(key) as? String
+ suspend fun getSettingBoolean(key: String): Boolean? = getSetting(key) as? Boolean
+ suspend fun getSettingNumber(key: String): Double? = getSetting(key) as? Double
+
+ suspend fun setSetting(key: String, value: Any?, valueType: String = "string") = withContext(Dispatchers.IO) {
+ require(key.isNotBlank()) { "key must not be empty" }
+ val serialized = when (valueType) {
+ "json" -> when (value) {
+ null -> "null"
+ is JsonElement -> value.toString()
+ else -> json.encodeToString(kotlinx.serialization.json.JsonElement.serializer(), JsonPrimitive(value.toString()))
+ }
+ "boolean" -> ((value as? Boolean) ?: false).toString()
+ else -> value?.toString() ?: ""
+ }
+ val now = System.currentTimeMillis()
+ val existing = findSettingRow(key)
+ if (existing != null) {
+ existing.value = serialized
+ existing.valueType = valueType
+ existing.updatedAt = now
+ settingsBox.put(existing)
+ } else {
+ settingsBox.put(AppSettingEntity().apply {
+ this.key = key
+ this.value = serialized
+ this.valueType = valueType
+ this.updatedAt = now
+ })
+ }
+ }
+
+ suspend fun removeSetting(key: String) = withContext(Dispatchers.IO) {
+ require(key.isNotBlank()) { "key must not be empty" }
+ findSettingRow(key)?.let { settingsBox.remove(it) }
+ }
+
+ suspend fun getTheme(): String = getSettingString("theme") ?: com.ironlog.app.ui.theme.IronLogThemes.DEFAULT_THEME
+ suspend fun setTheme(theme: String) = setSetting("theme", theme, "string")
+ suspend fun getActiveWorkoutId(): String? = getSettingString("active_workout_id")
+ suspend fun setActiveWorkoutId(workoutId: String?) {
+ if (workoutId.isNullOrBlank()) removeSetting("active_workout_id") else setSetting("active_workout_id", workoutId, "string")
+ }
+ suspend fun clearActiveWorkoutId() = removeSetting("active_workout_id")
+
+ /**
+ * Reads back the raw stored string for the given key.
+ *
+ * For rows with valueType="json" the historic [setSetting] implementation accidentally
+ * double-encoded plain strings via [JsonPrimitive], producing a JSON string-literal
+ * `"\"...\""` rather than the raw JSON text. This function transparently unwraps that
+ * old encoding so the first-restart-after-upgrade path keeps working without a migration.
+ */
+ suspend fun getString(key: String): String? = withContext(Dispatchers.IO) {
+ val row = findSettingRow(key) ?: return@withContext null
+ val raw = row.value.takeIf { it.isNotEmpty() } ?: return@withContext null
+ if (row.valueType == "json") {
+ // Try to detect the old double-encoded format: a JSON string literal wrapping
+ // a JSON object/array. If parsing yields a JsonPrimitive whose content is itself
+ // valid JSON, return the inner content; otherwise return the raw value as-is.
+ runCatching {
+ val element = json.parseToJsonElement(raw)
+ if (element is JsonPrimitive && element.isString) element.content else raw
+ }.getOrDefault(raw)
+ } else raw
+ }
+
+ /**
+ * Stores [value] verbatim — does NOT go through [setSetting]'s [JsonPrimitive] encoding
+ * path, which would double-encode a JSON string into `"\"...escaped...\"".
+ */
+ suspend fun setString(key: String, value: String, valueType: String = "string") = withContext(Dispatchers.IO) {
+ require(key.isNotBlank()) { "key must not be empty" }
+ val now = System.currentTimeMillis()
+ val existing = findSettingRow(key)
+ if (existing != null) {
+ existing.value = value
+ existing.valueType = valueType
+ existing.updatedAt = now
+ settingsBox.put(existing)
+ } else {
+ settingsBox.put(AppSettingEntity().apply {
+ this.key = key
+ this.value = value
+ this.valueType = valueType
+ this.updatedAt = now
+ })
+ }
+ }
+
+ /**
+ * Synchronous escape hatch for lifecycle-critical writes where the caller may be disposed
+ * before a launched coroutine gets CPU time (for example active workout draft snapshots
+ * during ON_STOP). Keep normal UI writes on the suspend API.
+ */
+ fun setStringBlocking(key: String, value: String, valueType: String = "string") {
+ require(key.isNotBlank()) { "key must not be empty" }
+ val now = System.currentTimeMillis()
+ val existing = findSettingRow(key)
+ if (existing != null) {
+ existing.value = value
+ existing.valueType = valueType
+ existing.updatedAt = now
+ settingsBox.put(existing)
+ } else {
+ settingsBox.put(AppSettingEntity().apply {
+ this.key = key
+ this.value = value
+ this.valueType = valueType
+ this.updatedAt = now
+ })
+ }
+ }
+ suspend fun getBoolean(key: String, default: Boolean = false): Boolean = getSettingBoolean(key) ?: default
+ suspend fun setBoolean(key: String, value: Boolean) = setSetting(key, value, "boolean")
+ suspend fun isExerciseSeedComplete(): Boolean = getBoolean("exercise_seed_complete", false)
+ suspend fun markExerciseSeedComplete() = setBoolean("exercise_seed_complete", true)
+
+ suspend fun loadFavorites(): Set {
+ val raw = getSettingJson("favorite_exercises") ?: return emptySet()
+ return runCatching { raw.jsonArray.map { it.jsonPrimitive.content }.filter { it.isNotBlank() }.toSet() }.getOrDefault(emptySet())
+ }
+
+ suspend fun saveFavorites(favorites: Set) {
+ val payload = buildJsonArray { favorites.sorted().forEach { add(JsonPrimitive(it)) } }
+ setSetting("favorite_exercises", payload, "json")
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/StatsRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/StatsRepository.kt
new file mode 100644
index 0000000..b97afc4
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/StatsRepository.kt
@@ -0,0 +1,271 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.model.PrRecord
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.WorkoutEntity
+import com.ironlog.app.data.objectbox.WorkoutEntity_
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutSetEntity
+import com.ironlog.app.data.objectbox.WorkoutSetEntity_
+import com.ironlog.app.domain.intelligence.PrLinkingEngine
+import com.ironlog.app.util.calculateEstimated1RM
+import com.ironlog.app.util.calculateSetVolume
+import com.ironlog.app.util.startOfWeekMillis
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
+
+class StatsRepository {
+ private val workoutsBox get() = ObjectBox.store.boxFor(WorkoutEntity::class.java)
+ private val workoutExercisesBox get() = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java)
+ private val workoutSetsBox get() = ObjectBox.store.boxFor(WorkoutSetEntity::class.java)
+ private val exercisesBox get() = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+ private val exerciseMusclesBox get() = ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java)
+
+ fun getSessionsPerWeekFlow(): Flow {
+ val weekStart = startOfWeekMillis()
+ return workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(weekStart)))
+ .build()
+ .asFlow()
+ .map { it.size.toLong() }
+ .conflate()
+ }
+
+ suspend fun getSessionsPerWeekSnapshot(): Long = withContext(Dispatchers.IO) {
+ val weekStart = startOfWeekMillis()
+ workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(weekStart)))
+ .build().use { it.count() }
+ }
+
+ fun getWeeklyVolumeFlow(): Flow {
+ val weekStart = startOfWeekMillis()
+ return workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(weekStart)))
+ .build()
+ .asFlow()
+ .map { workouts ->
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@map 0.0
+ val workoutExercises = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseIds = workoutExercises.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@map 0.0
+ val workoutSets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ workoutSets.sumOf { calculateSetVolume(it.weight, it.reps) }
+ }
+ .conflate()
+ }
+
+ suspend fun getWeeklyVolumeSnapshot(): Double = withContext(Dispatchers.IO) {
+ val weekStart = startOfWeekMillis()
+ val workouts = workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(weekStart))).build().use { it.find() }
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@withContext 0.0
+ val workoutExercises = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseIds = workoutExercises.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@withContext 0.0
+ val workoutSets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ workoutSets.sumOf { calculateSetVolume(it.weight, it.reps) }
+ }
+
+ fun getExerciseEstimatedOneRepMaxFlow(exerciseId: String): Flow {
+ val completedWorkouts = workoutsBox.query(WorkoutEntity_.status.equal("completed")).build().asFlow()
+ val exerciseRows = workoutExercisesBox.query(WorkoutExerciseEntity_.exerciseUid.equal(exerciseId)).build().asFlow()
+ val workingSets = workoutSetsBox.query(WorkoutSetEntity_.isWarmup.equal(false)).build().asFlow()
+ return combine(completedWorkouts, exerciseRows, workingSets) { workouts, rows, sets ->
+ val completedIds = workouts.mapTo(hashSetOf()) { it.uid }
+ val eligibleRowIds = rows.asSequence()
+ .filter { it.workoutUid in completedIds }
+ .mapTo(hashSetOf()) { it.uid }
+ sets.asSequence()
+ .filter { it.workoutExerciseUid in eligibleRowIds }
+ .maxOfOrNull { calculateEstimated1RM(it.weight, it.reps) }
+ ?: 0.0
+ }
+ .conflate()
+ }
+
+ suspend fun getExerciseEstimatedOneRepMaxSnapshot(exerciseId: String): Double = withContext(Dispatchers.IO) {
+ val completedIds = workoutsBox.query(WorkoutEntity_.status.equal("completed")).build().use { it.find() }
+ .mapTo(hashSetOf()) { it.uid }
+ if (completedIds.isEmpty()) return@withContext 0.0
+ val exerciseRows = workoutExercisesBox.query(WorkoutExerciseEntity_.exerciseUid.equal(exerciseId)).build().use { it.find() }
+ .filter { it.workoutUid in completedIds }
+ val exerciseRowIds = exerciseRows.map { it.uid }.toTypedArray()
+ if (exerciseRowIds.isEmpty()) return@withContext 0.0
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(exerciseRowIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ var max = 0.0
+ sets.forEach { set ->
+ max = kotlin.math.max(max, calculateEstimated1RM(set.weight, set.reps))
+ }
+ max
+ }
+
+ fun getPRsFlow(): Flow> {
+ return workoutsBox.query(WorkoutEntity_.status.equal("completed")).orderDesc(WorkoutEntity_.startedAt)
+ .build()
+ .asFlow()
+ .map { workouts ->
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@map emptyList()
+ val workoutExercises = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseIds = workoutExercises.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@map emptyList()
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ val exerciseIds = workoutExercises.map { it.exerciseUid }.distinct().toTypedArray()
+ val exercises = if (exerciseIds.isEmpty()) {
+ emptyList()
+ } else {
+ exercisesBox.query(ExerciseEntity_.uid.oneOf(exerciseIds)).build().use { it.find() }
+ }
+ val exByWorkoutExerciseId = workoutExercises.associate { it.uid to it.exerciseUid }
+ val exerciseById = exercises.associateBy { it.uid }
+ val best = linkedMapOf()
+
+ sets.forEach { set ->
+ val exerciseId = exByWorkoutExerciseId[set.workoutExerciseUid] ?: return@forEach
+ val ex = exerciseById[exerciseId]
+ val groupId = PrLinkingEngine.getPrGroupId(
+ name = ex?.name.orEmpty(),
+ primaryMuscle = ex?.primaryMuscle,
+ equipment = ex?.equipment,
+ category = ex?.category,
+ mode = "safe",
+ ) ?: "exact_${ex?.name ?: exerciseId}"
+ val candidate = calculateEstimated1RM(set.weight, set.reps)
+ val current = best[groupId]
+ if (current == null || candidate > current.estimated1RM) {
+ best[groupId] = PrRecord(
+ exerciseId = exerciseId,
+ exerciseName = ex?.name ?: "Unknown",
+ exercisePrGroupId = groupId,
+ weight = set.weight,
+ reps = set.reps,
+ estimated1RM = candidate,
+ )
+ }
+ }
+ best.values.sortedByDescending { it.estimated1RM }
+ }
+ .conflate()
+ }
+
+ suspend fun getPRsSnapshot(): List = withContext(Dispatchers.IO) {
+ val workouts = workoutsBox.query(WorkoutEntity_.status.equal("completed")).build().use { it.find() }
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@withContext emptyList()
+ val workoutExercises = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseIds = workoutExercises.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@withContext emptyList()
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ val exerciseIds = workoutExercises.map { it.exerciseUid }.distinct().toTypedArray()
+ val exercises = if (exerciseIds.isEmpty()) {
+ emptyList()
+ } else {
+ exercisesBox.query(ExerciseEntity_.uid.oneOf(exerciseIds)).build().use { it.find() }
+ }
+ val exByWorkoutExerciseId = workoutExercises.associate { it.uid to it.exerciseUid }
+ val exerciseById = exercises.associateBy { it.uid }
+ val best = linkedMapOf()
+
+ sets.forEach { set ->
+ val exerciseId = exByWorkoutExerciseId[set.workoutExerciseUid] ?: return@forEach
+ val ex = exerciseById[exerciseId]
+ val groupId = PrLinkingEngine.getPrGroupId(
+ name = ex?.name.orEmpty(),
+ primaryMuscle = ex?.primaryMuscle,
+ equipment = ex?.equipment,
+ category = ex?.category,
+ mode = "safe",
+ ) ?: "exact_${ex?.name ?: exerciseId}"
+ val candidate = calculateEstimated1RM(set.weight, set.reps)
+ val current = best[groupId]
+ if (current == null || candidate > current.estimated1RM) {
+ best[groupId] = PrRecord(
+ exerciseId = exerciseId,
+ exerciseName = ex?.name ?: "Unknown",
+ exercisePrGroupId = groupId,
+ weight = set.weight,
+ reps = set.reps,
+ estimated1RM = candidate,
+ )
+ }
+ }
+ best.values.sortedByDescending { it.estimated1RM }
+ }
+
+ fun getMuscleVolumeFlow(timeRange: Int = 14): Flow> {
+ val from = System.currentTimeMillis() - timeRange * 24L * 60L * 60L * 1000L
+ return workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(from)))
+ .build()
+ .asFlow()
+ .map { workouts ->
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@map emptyMap()
+ val workoutExerciseRows = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseById = workoutExerciseRows.associateBy { it.uid }
+ val workoutExerciseIds = workoutExerciseRows.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@map emptyMap()
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ val exerciseIds = workoutExerciseRows.map { it.exerciseUid }.distinct().toTypedArray()
+ val musclesByExercise = if (exerciseIds.isEmpty()) {
+ emptyMap()
+ } else {
+ exerciseMusclesBox.query(ExerciseMuscleEntity_.exerciseUid.oneOf(exerciseIds))
+ .build().use { it.find() }
+ .groupBy { it.exerciseUid }
+ }
+ val totals = linkedMapOf()
+
+ sets.forEach { set ->
+ val workoutExercise = workoutExerciseById[set.workoutExerciseUid] ?: return@forEach
+ val volume = calculateSetVolume(set.weight, set.reps)
+ val muscles = musclesByExercise[workoutExercise.exerciseUid].orEmpty()
+ muscles.forEach { muscle ->
+ val contrib = volume * muscle.contributionFraction
+ totals[muscle.muscle] = (totals[muscle.muscle] ?: 0.0) + contrib
+ }
+ }
+ totals
+ }
+ .conflate()
+ }
+
+ suspend fun getMuscleVolumeSnapshot(timeRange: Int = 14): Map = withContext(Dispatchers.IO) {
+ val from = System.currentTimeMillis() - timeRange * 24L * 60L * 60L * 1000L
+ val workouts = workoutsBox.query(WorkoutEntity_.status.equal("completed").and(WorkoutEntity_.startedAt.greaterOrEqual(from))).build().use { it.find() }
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ if (workoutIds.isEmpty()) return@withContext emptyMap()
+ val workoutExerciseRows = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ val workoutExerciseById = workoutExerciseRows.associateBy { it.uid }
+ val workoutExerciseIds = workoutExerciseRows.map { it.uid }.toTypedArray()
+ if (workoutExerciseIds.isEmpty()) return@withContext emptyMap()
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(workoutExerciseIds).and(WorkoutSetEntity_.isWarmup.equal(false))).build().use { it.find() }
+ val exerciseIds = workoutExerciseRows.map { it.exerciseUid }.distinct().toTypedArray()
+ val musclesByExercise = if (exerciseIds.isEmpty()) {
+ emptyMap()
+ } else {
+ exerciseMusclesBox.query(ExerciseMuscleEntity_.exerciseUid.oneOf(exerciseIds))
+ .build().use { it.find() }
+ .groupBy { it.exerciseUid }
+ }
+ val totals = linkedMapOf()
+
+ sets.forEach { set ->
+ val workoutExercise = workoutExerciseById[set.workoutExerciseUid] ?: return@forEach
+ val volume = calculateSetVolume(set.weight, set.reps)
+ val muscles = musclesByExercise[workoutExercise.exerciseUid].orEmpty()
+ muscles.forEach { muscle ->
+ val contrib = volume * muscle.contributionFraction
+ totals[muscle.muscle] = (totals[muscle.muscle] ?: 0.0) + contrib
+ }
+ }
+ totals
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/repository/WorkoutRepository.kt b/app/src/main/java/com/ironlog/app/data/repository/WorkoutRepository.kt
new file mode 100644
index 0000000..96b47fd
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/repository/WorkoutRepository.kt
@@ -0,0 +1,558 @@
+package com.ironlog.app.data.repository
+
+import com.ironlog.app.data.model.CompletedExerciseInput
+import com.ironlog.app.data.model.CreateCompletedWorkoutInput
+import com.ironlog.app.data.model.SetInput
+import com.ironlog.app.data.model.WorkoutDetail
+import com.ironlog.app.data.model.WorkoutMetadataInput
+import com.ironlog.app.data.objectbox.AppSettingEntity
+import com.ironlog.app.data.objectbox.AppSettingEntity_
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.objectbox.PlanDayEntity_
+import com.ironlog.app.data.objectbox.PlanExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutEntity
+import com.ironlog.app.data.objectbox.WorkoutEntity_
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity
+import com.ironlog.app.data.objectbox.WorkoutExerciseEntity_
+import com.ironlog.app.data.objectbox.WorkoutSetEntity
+import com.ironlog.app.data.objectbox.WorkoutSetEntity_
+import com.ironlog.app.util.calculateSetVolume
+import com.ironlog.app.util.normalizeExerciseNameKey
+import com.ironlog.app.util.requireNonEmpty
+import com.ironlog.app.util.requireNumberMin
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.withContext
+import java.time.LocalDate
+import java.time.LocalTime
+import java.time.ZoneId
+import kotlin.math.max
+import kotlin.math.roundToInt
+
+data class PostWorkoutMetricsResult(
+ val newlyRecorded: Boolean,
+ val cumulativeVolumeKg: Double,
+)
+
+class WorkoutRepository(
+ private val settingsRepository: SettingsRepository = SettingsRepository(),
+) {
+ private val workoutsBox get() = ObjectBox.store.boxFor(WorkoutEntity::class.java)
+ private val workoutExercisesBox get() = ObjectBox.store.boxFor(WorkoutExerciseEntity::class.java)
+ private val workoutSetsBox get() = ObjectBox.store.boxFor(WorkoutSetEntity::class.java)
+ private val planDaysBox get() = ObjectBox.store.boxFor(com.ironlog.app.data.objectbox.PlanDayEntity::class.java)
+ private val planExercisesBox get() = ObjectBox.store.boxFor(com.ironlog.app.data.objectbox.PlanExerciseEntity::class.java)
+ private val exercisesBox get() = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+ private val settingsBox get() = ObjectBox.store.boxFor(AppSettingEntity::class.java)
+
+ suspend fun startWorkoutFromPlanDay(planDayId: String): WorkoutEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(planDayId, "planDayId")
+ val now = System.currentTimeMillis()
+ val startedAt = readIntendedWorkoutStartMs(now)
+ val planDay = planDaysBox.query(PlanDayEntity_.uid.equal(planDayId)).build().use { it.findFirst() }
+ ?: error("Plan day not found: $planDayId")
+ val planRows = planExercisesBox.query(PlanExerciseEntity_.planDayUid.equal(planDayId))
+ .order(PlanExerciseEntity_.orderIndex).build().use { it.find() }
+ val workout = WorkoutEntity().apply {
+ this.planDay.target = planDay
+ planDayUid = planDay.uid
+ plan.target = planDay.plan.target
+ planUid = planDay.planUid.ifBlank { null }
+ name = "${planDay.name.ifBlank { "Workout" }} Session"
+ this.startedAt = startedAt
+ durationSeconds = 0
+ status = "active"
+ createdAt = now
+ updatedAt = now
+ }
+ val workoutExerciseRows = planRows.mapIndexedNotNull { index, planExercise ->
+ val exercise = exercisesBox.query(ExerciseEntity_.uid.equal(planExercise.exerciseUid)).build().use { it.findFirst() } ?: return@mapIndexedNotNull null
+ WorkoutExerciseEntity().apply {
+ this.workout.target = workout
+ workoutUid = workout.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = index
+ supersetGroup = planExercise.supersetGroup.ifBlank { "" }
+ notes = planExercise.notes.ifBlank { "" }
+ createdAt = now
+ updatedAt = now
+ }
+ }
+ ObjectBox.store.runInTx {
+ workoutsBox.put(workout)
+ if (workoutExerciseRows.isNotEmpty()) workoutExercisesBox.put(workoutExerciseRows)
+ writeActiveWorkoutSettings(workout.uid, planDayId, planDay.name.ifBlank { "Workout" }, now)
+ }
+ // active_workout_start_ms is NOT written here — the timer only begins when the
+ // first set is logged (see ActiveWorkoutViewModel.startTimerOnFirstSet).
+ workout
+ }
+
+ suspend fun startEmptyWorkout(name: String): WorkoutEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(name, "name")
+ val now = System.currentTimeMillis()
+ val startedAt = readIntendedWorkoutStartMs(now)
+ val workout = WorkoutEntity().apply {
+ this.name = name.trim()
+ this.startedAt = startedAt
+ durationSeconds = 0
+ status = "active"
+ createdAt = now
+ updatedAt = now
+ }
+ ObjectBox.store.runInTx {
+ workoutsBox.put(workout)
+ writeActiveWorkoutSettings(workout.uid, null, name.trim(), now)
+ }
+ // active_workout_start_ms is NOT written here — timer starts on first set.
+ workout
+ }
+
+ private suspend fun readIntendedWorkoutStartMs(now: Long): Long {
+ val dateKey = settingsRepository.getString("active_workout_intended_date")
+ if (dateKey.isNullOrBlank()) return now
+ return runCatching {
+ val selectedDate = LocalDate.parse(dateKey)
+ val today = LocalDate.now()
+ if (selectedDate.isAfter(today)) return now
+ selectedDate
+ .atTime(LocalTime.now())
+ .atZone(ZoneId.systemDefault())
+ .toInstant()
+ .toEpochMilli()
+ }.getOrDefault(now)
+ }
+
+ suspend fun addExerciseToWorkout(workoutId: String, exerciseId: String): WorkoutExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ requireNonEmpty(exerciseId, "exerciseId")
+ val workout = findWorkoutByUidOrThrow(workoutId)
+ val exercise = findExerciseByUidOrThrow(exerciseId)
+ val now = System.currentTimeMillis()
+ val count = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.equal(workoutId)).build().use { it.count().toInt() }
+ val created = WorkoutExerciseEntity().apply {
+ this.workout.target = workout
+ workoutUid = workout.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = count
+ supersetGroup = ""
+ notes = ""
+ createdAt = now
+ updatedAt = now
+ }
+ workoutExercisesBox.put(created)
+ created
+ }
+
+ suspend fun swapWorkoutExercise(workoutExerciseId: String, newExerciseId: String): WorkoutExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ requireNonEmpty(newExerciseId, "newExerciseId")
+ val row = findWorkoutExerciseByUidOrThrow(workoutExerciseId)
+ val exercise = findExerciseByUidOrThrow(newExerciseId)
+ row.exercise.target = exercise
+ row.exerciseUid = exercise.uid
+ row.updatedAt = System.currentTimeMillis()
+ workoutExercisesBox.put(row)
+ row
+ }
+
+ suspend fun updateWorkoutExerciseSuperset(workoutExerciseId: String, group: String?): WorkoutExerciseEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ val row = findWorkoutExerciseByUidOrThrow(workoutExerciseId)
+ row.supersetGroup = group?.trim().orEmpty()
+ row.updatedAt = System.currentTimeMillis()
+ workoutExercisesBox.put(row)
+ row
+ }
+
+ suspend fun removeExerciseFromWorkout(workoutExerciseId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ val workoutExercise = findWorkoutExerciseByUidOrThrow(workoutExerciseId)
+ val sets = getSetsForWorkoutExercise(workoutExerciseId)
+ workoutSetsBox.remove(sets)
+ workoutExercisesBox.remove(workoutExercise)
+ Unit
+ }
+
+ suspend fun addSet(workoutExerciseId: String, input: SetInput): WorkoutSetEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ requireNumberMin(input.weight ?: 0.0, 0.0, "weight")
+ requireNumberMin(input.reps ?: 0.0, 0.0, "reps")
+ requireNumberMin(input.restSeconds ?: 0, 0.0, "restSeconds")
+ val workoutExercise = findWorkoutExerciseByUidOrThrow(workoutExerciseId)
+ val now = System.currentTimeMillis()
+ val count = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.equal(workoutExerciseId)).build().use { it.count().toInt() }
+ val created = WorkoutSetEntity().apply {
+ this.workoutExercise.target = workoutExercise
+ this.workoutExerciseUid = workoutExercise.uid
+ setIndex = count + 1
+ weight = input.weight ?: 0.0
+ reps = input.reps ?: 0.0
+ rpe = input.rpe
+ rir = input.rir
+ restSeconds = input.restSeconds ?: 0
+ isWarmup = input.isWarmup == true
+ isDropset = input.isDropset == true
+ isAmrap = input.isAmrap == true
+ toFailure = input.toFailure == true
+ completedAt = input.completedAt ?: now
+ createdAt = now
+ updatedAt = now
+ }
+ workoutSetsBox.put(created)
+ created
+ }
+
+ suspend fun updateSet(setId: String, input: SetInput): WorkoutSetEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(setId, "setId")
+ val row = findSetByUidOrThrow(setId)
+ if (input.setIndex != null) row.setIndex = input.setIndex
+ if (input.weight != null) row.weight = input.weight
+ if (input.reps != null) row.reps = input.reps
+ if (input.rpe != null) row.rpe = input.rpe
+ if (input.rir != null) row.rir = input.rir
+ if (input.restSeconds != null) row.restSeconds = input.restSeconds
+ if (input.isWarmup != null) row.isWarmup = input.isWarmup
+ if (input.isDropset != null) row.isDropset = input.isDropset
+ if (input.isAmrap != null) row.isAmrap = input.isAmrap
+ if (input.toFailure != null) row.toFailure = input.toFailure
+ if (input.completedAt != null) row.completedAt = input.completedAt.takeIf { it != 0L }
+ row.updatedAt = System.currentTimeMillis()
+ workoutSetsBox.put(row)
+ row
+ }
+
+ suspend fun updateSetByWorkoutExerciseAndOrder(
+ workoutExerciseId: String,
+ setOrderIndex: Int,
+ input: SetInput,
+ ): WorkoutSetEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ require(setOrderIndex > 0) { "setOrderIndex must be >= 1" }
+ val row = workoutSetsBox.query(
+ WorkoutSetEntity_.workoutExerciseUid.equal(workoutExerciseId)
+ .and(WorkoutSetEntity_.setIndex.equal(setOrderIndex.toLong())),
+ ).build().use { it.findFirst() } ?: error("Set not found for workoutExerciseId=$workoutExerciseId setIndex=$setOrderIndex")
+ updateSet(row.uid, input)
+ }
+
+ suspend fun deleteSet(setId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(setId, "setId")
+ workoutSetsBox.remove(findSetByUidOrThrow(setId))
+ Unit
+ }
+
+ suspend fun deleteWorkoutExercise(workoutExerciseId: String) = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutExerciseId, "workoutExerciseId")
+ val entity = runCatching { findWorkoutExerciseByUidOrThrow(workoutExerciseId) }.getOrNull() ?: return@withContext
+ // Also delete all sets belonging to this exercise
+ val sets = workoutSetsBox.query(
+ com.ironlog.app.data.objectbox.WorkoutSetEntity_.workoutExerciseUid.equal(workoutExerciseId)
+ ).build().use { it.find() }
+ workoutSetsBox.remove(sets)
+ workoutExercisesBox.remove(entity)
+ }
+
+ suspend fun completeWorkout(
+ workoutId: String,
+ durationStartEpochMs: Long? = null,
+ metadata: WorkoutMetadataInput = WorkoutMetadataInput(),
+ ): WorkoutEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ val workout = findWorkoutByUidOrThrow(workoutId)
+ val now = System.currentTimeMillis()
+ ObjectBox.store.runInTx {
+ if (workout.status != "completed") {
+ val validDurationStart = durationStartEpochMs?.takeIf { it in 1..now }
+ val rawDurationSec = validDurationStart?.let { ((now - it) / 1000.0).roundToInt() }
+ ?: workout.durationSeconds.coerceAtLeast(0)
+ workout.durationSeconds = rawDurationSec.coerceIn(0, 86_400)
+ workout.status = "completed"
+ workout.completedAt = if (workout.startedAt > 0L && now - workout.startedAt >= 86_400_000L) {
+ workout.startedAt + workout.durationSeconds * 1000L
+ } else {
+ now
+ }
+ if (metadata.rating != null) workout.rating = metadata.rating
+ if (metadata.notes != null) workout.notes = metadata.notes
+ workout.updatedAt = now
+ workoutsBox.put(workout)
+ }
+ clearActiveWorkoutSettings(workoutId)
+ }
+ workout
+ }
+
+ suspend fun abandonWorkout(workoutId: String): WorkoutEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ val workout = findWorkoutByUidOrThrow(workoutId)
+ val now = System.currentTimeMillis()
+ ObjectBox.store.runInTx {
+ if (workout.status != "abandoned") {
+ workout.status = "abandoned"
+ workout.completedAt = now
+ workout.updatedAt = now
+ workoutsBox.put(workout)
+ }
+ clearActiveWorkoutSettings(workoutId)
+ }
+ workout
+ }
+
+ suspend fun recordPostWorkoutMetrics(
+ workoutId: String,
+ volumeKg: Double,
+ hasNewPr: Boolean,
+ ): PostWorkoutMetricsResult = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ val markerKey = "workout_post_processed_$workoutId"
+ var result = PostWorkoutMetricsResult(newlyRecorded = false, cumulativeVolumeKg = 0.0)
+ ObjectBox.store.runInTx {
+ val existingMarker = settingsBox.query(AppSettingEntity_.key.equal(markerKey))
+ .build().use { it.findFirst() }
+ val lifetimeRow = settingsBox.query(AppSettingEntity_.key.equal("lifetime_volume_kg"))
+ .build().use { it.findFirst() }
+ val currentLifetime = lifetimeRow?.value?.toDoubleOrNull() ?: 0.0
+ if (existingMarker != null) {
+ result = PostWorkoutMetricsResult(false, currentLifetime)
+ return@runInTx
+ }
+
+ val now = System.currentTimeMillis()
+ val cumulative = currentLifetime + volumeKg.coerceAtLeast(0.0)
+ putSetting("lifetime_volume_kg", cumulative.toString(), now)
+ if (hasNewPr) putSetting("widget_last_new_pb_ms", now.toString(), now)
+ putSetting(markerKey, "true", now)
+ result = PostWorkoutMetricsResult(true, cumulative)
+ }
+ result
+ }
+
+ private fun writeActiveWorkoutSettings(
+ workoutId: String,
+ dayId: String?,
+ dayName: String,
+ now: Long,
+ ) {
+ putSetting("active_workout_id", workoutId, now)
+ if (dayId.isNullOrBlank()) removeSettings("active_workout_day_id")
+ else putSetting("active_workout_day_id", dayId, now)
+ putSetting("active_workout_day_name", dayName, now)
+ removeSettings(
+ "active_workout_start_ms",
+ "active_workout_set_label",
+ "active_workout_rest_end_ms",
+ "active_workout_intended_date",
+ )
+ }
+
+ private fun clearActiveWorkoutSettings(workoutId: String) {
+ removeSettings(
+ "active_workout_id",
+ "active_workout_day_id",
+ "active_workout_day_name",
+ "active_workout_start_ms",
+ "active_workout_set_label",
+ "active_workout_rest_end_ms",
+ "active_workout_draft_$workoutId",
+ "active_workout_rest_override_$workoutId",
+ )
+ }
+
+ private fun putSetting(key: String, value: String, now: Long) {
+ settingsBox.put(AppSettingEntity().apply {
+ this.key = key
+ this.value = value
+ valueType = "string"
+ updatedAt = now
+ })
+ }
+
+ private fun removeSettings(vararg keys: String) {
+ if (keys.isEmpty()) return
+ val rows = settingsBox.query(AppSettingEntity_.key.oneOf(keys)).build().use { it.find() }
+ settingsBox.remove(rows)
+ }
+
+ fun getCompletedWorkoutsFlow(): Flow> =
+ workoutsBox.query(WorkoutEntity_.status.equal("completed")).orderDesc(WorkoutEntity_.startedAt).build().asFlow()
+
+ suspend fun updateWorkoutMetadata(workoutId: String, input: WorkoutMetadataInput): WorkoutEntity = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ val workout = findWorkoutByUidOrThrow(workoutId)
+ if (input.startedAt != null) {
+ workout.startedAt = input.startedAt
+ if ((workout.completedAt ?: 0L) < workout.startedAt) workout.completedAt = workout.startedAt
+ }
+ if (input.durationSeconds != null) workout.durationSeconds = max(0, input.durationSeconds)
+ if (input.rating != null) workout.rating = input.rating
+ if (input.notes != null) workout.notes = input.notes
+ workout.updatedAt = System.currentTimeMillis()
+ workoutsBox.put(workout)
+ workout
+ }
+
+ suspend fun createCompletedWorkout(input: CreateCompletedWorkoutInput): WorkoutEntity = withContext(Dispatchers.IO) {
+ val now = System.currentTimeMillis()
+ val completedAt = input.startedAt + input.durationSeconds * 1000L
+
+ // Extract unique normalized names of the incoming exercises to avoid loading the entire table.
+ val targetNames = input.exerciseData.mapNotNull { it.name?.let(::normalizeExerciseNameKey) }.distinct().toTypedArray()
+ val existing = if (targetNames.isEmpty()) emptyList() else {
+ exercisesBox.query(ExerciseEntity_.normalizedName.oneOf(targetNames)).build().use { it.find() }
+ }
+ val exByNormName = existing.associateBy { it.normalizedName }.toMutableMap()
+
+ var workoutResult: WorkoutEntity? = null
+ ObjectBox.store.runInTx {
+ val missing = input.exerciseData.filter { ex -> !exByNormName.containsKey(normalizeExerciseNameKey(ex.name ?: "")) }
+ for (ex in missing) {
+ val normName = normalizeExerciseNameKey(ex.name ?: "Exercise")
+ val created = ExerciseEntity().apply {
+ name = ex.name ?: "Exercise"
+ normalizedName = normName
+ primaryMuscle = ex.primaryMuscles?.firstOrNull() ?: ex.primaryMuscle ?: "Other"
+ equipment = ex.equipment ?: "Other"
+ category = ex.category ?: "strength"
+ isCustom = true
+ source = "user_custom"
+ notes = ""
+ createdAt = now
+ updatedAt = now
+ isBodyweight = equipment.lowercase() == "bodyweight"
+ }
+ exercisesBox.put(created)
+ exByNormName[normName] = created
+ }
+
+ val workout = WorkoutEntity().apply {
+ name = input.name ?: "Workout"
+ startedAt = input.startedAt
+ this.completedAt = completedAt
+ durationSeconds = max(0.0, input.durationSeconds.toDouble()).roundToInt()
+ rating = input.rating
+ notes = input.notes ?: ""
+ status = "completed"
+ createdAt = input.startedAt
+ updatedAt = now
+ }
+ workoutsBox.put(workout)
+
+ input.exerciseData.forEachIndexed { exIndex, ex ->
+ val normName = normalizeExerciseNameKey(ex.name ?: "")
+ val exercise = ex.exerciseId?.let(::findExerciseByUidOrNull) ?: exByNormName[normName] ?: return@forEachIndexed
+ val we = WorkoutExerciseEntity().apply {
+ this.workout.target = workout
+ workoutUid = workout.uid
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ orderIndex = exIndex
+ supersetGroup = ex.supersetGroup ?: ""
+ notes = ex.note ?: ex.notes ?: ""
+ createdAt = input.startedAt
+ updatedAt = now
+ }
+ workoutExercisesBox.put(we)
+ val setRows = ex.sets.mapIndexed { si, s ->
+ WorkoutSetEntity().apply {
+ workoutExercise.target = we
+ workoutExerciseUid = we.uid
+ setIndex = si + 1
+ weight = max(0.0, s.weight ?: 0.0)
+ reps = max(0.0, s.reps ?: 0.0)
+ rpe = s.rpe
+ rir = s.rir
+ restSeconds = max(0, s.restSeconds ?: s.rest ?: 0)
+ isWarmup = s.type == "warmup" || s.isWarmup == true
+ isDropset = s.type == "dropset" || s.isDropset == true
+ isAmrap = s.type == "amrap" || s.isAmrap == true || s.isAMRAP == true
+ toFailure = s.type == "failure" || s.toFailure == true
+ this.completedAt = completedAt
+ createdAt = input.startedAt
+ updatedAt = now
+ }
+ }
+ if (setRows.isNotEmpty()) workoutSetsBox.put(setRows)
+ }
+ workoutResult = workout
+ }
+ workoutResult ?: error("Failed to save workout in transaction")
+ }
+
+ suspend fun clearCompletedWorkouts() = withContext(Dispatchers.IO) {
+ val workouts = workoutsBox.query(WorkoutEntity_.status.equal("completed")).build().use { it.find() }
+ if (workouts.isEmpty()) return@withContext
+ val workoutIds = workouts.map { it.uid }.toTypedArray()
+ val wes = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.oneOf(workoutIds)).build().use { it.find() }
+ if (wes.isNotEmpty()) {
+ val weIds = wes.map { it.uid }.toTypedArray()
+ val sets = workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(weIds)).build().use { it.find() }
+ if (sets.isNotEmpty()) {
+ workoutSetsBox.remove(sets)
+ }
+ workoutExercisesBox.remove(wes)
+ }
+ workoutsBox.remove(workouts)
+ }
+
+ suspend fun getWorkoutDetailSnapshot(workoutId: String): WorkoutDetail = withContext(Dispatchers.IO) {
+ requireNonEmpty(workoutId, "workoutId")
+ val workout = findWorkoutByUidOrThrow(workoutId)
+ val exercises = workoutExercisesBox.query(WorkoutExerciseEntity_.workoutUid.equal(workoutId)).order(WorkoutExerciseEntity_.orderIndex).build().use { it.find() }
+ val exerciseIds = exercises.map { it.uid }.toSet()
+ val scopedSets = if (exerciseIds.isEmpty()) emptyList() else {
+ workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.oneOf(exerciseIds.toTypedArray()))
+ .order(WorkoutSetEntity_.setIndex)
+ .build().use { it.find() }
+ }
+ val totalVolume = scopedSets.sumOf { calculateSetVolume(it.weight, it.reps) }
+ WorkoutDetail(workout, exercises, scopedSets, totalVolume)
+ }
+
+ /** Returns non-warmup sets from the most recent completed workout that contained [exerciseId]. */
+ suspend fun getLastSessionSetsForExercise(exerciseId: String): List = withContext(Dispatchers.IO) {
+ val recentWes = workoutExercisesBox
+ .query(WorkoutExerciseEntity_.exerciseUid.equal(exerciseId))
+ .build().use { it.find() }
+ .sortedByDescending { it.createdAt }
+ .take(10)
+
+ for (we in recentWes) {
+ workoutsBox.query(
+ WorkoutEntity_.uid.equal(we.workoutUid)
+ .and(WorkoutEntity_.status.equal("completed")),
+ ).build().use { it.findFirst() } ?: continue
+
+ val sets = workoutSetsBox
+ .query(WorkoutSetEntity_.workoutExerciseUid.equal(we.uid))
+ .order(WorkoutSetEntity_.setIndex)
+ .build().use { it.find() }
+ .filter { !it.isWarmup }
+
+ if (sets.isNotEmpty()) return@withContext sets
+ }
+ emptyList()
+ }
+
+ private fun getSetsForWorkoutExercise(workoutExerciseId: String): List =
+ workoutSetsBox.query(WorkoutSetEntity_.workoutExerciseUid.equal(workoutExerciseId)).build().use { it.find() }
+
+ private fun findWorkoutByUidOrThrow(uid: String): WorkoutEntity =
+ workoutsBox.query(WorkoutEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Workout not found: $uid")
+
+ private fun findWorkoutExerciseByUidOrThrow(uid: String): WorkoutExerciseEntity =
+ workoutExercisesBox.query(WorkoutExerciseEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Workout exercise not found: $uid")
+
+ private fun findSetByUidOrThrow(uid: String): WorkoutSetEntity =
+ workoutSetsBox.query(WorkoutSetEntity_.uid.equal(uid)).build().use { it.findFirst() } ?: error("Set not found: $uid")
+
+ private fun findExerciseByUidOrThrow(uid: String): ExerciseEntity =
+ findExerciseByUidOrNull(uid) ?: error("Exercise not found: $uid")
+
+ private fun findExerciseByUidOrNull(uid: String): ExerciseEntity? =
+ exercisesBox.query(ExerciseEntity_.uid.equal(uid)).build().use { it.findFirst() }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/seed/ExerciseSeed.kt b/app/src/main/java/com/ironlog/app/data/seed/ExerciseSeed.kt
new file mode 100644
index 0000000..d9c22f0
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/seed/ExerciseSeed.kt
@@ -0,0 +1,208 @@
+package com.ironlog.app.data.seed
+
+import android.content.Context
+import com.ironlog.app.util.ExerciseTrackingTypeNormalizer
+import com.ironlog.app.data.model.ExerciseSeedEntry
+import com.ironlog.app.data.model.ExerciseSeedPayload
+import com.ironlog.app.data.objectbox.ExerciseEntity
+import com.ironlog.app.data.objectbox.ExerciseEntity_
+import com.ironlog.app.data.objectbox.ExerciseMuscleEntity
+import com.ironlog.app.data.objectbox.ObjectBox
+import com.ironlog.app.data.repository.SettingsRepository
+import com.ironlog.app.util.normalizeExerciseNameKey
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
+import java.util.Locale
+import kotlin.math.max
+
+class ExerciseSeed(
+ private val context: Context,
+ private val settingsRepository: SettingsRepository = SettingsRepository(),
+) {
+ private val exerciseBox get() = ObjectBox.store.boxFor(ExerciseEntity::class.java)
+ private val muscleBox get() = ObjectBox.store.boxFor(ExerciseMuscleEntity::class.java)
+ private val json = Json { ignoreUnknownKeys = true; explicitNulls = false }
+
+ data class SeedResult(val seeded: Boolean, val reason: String? = null, val count: Int? = null)
+ data class BackfillResult(val backfilled: Boolean, val reason: String? = null, val count: Int? = null)
+
+ suspend fun seedExercisesIfNeeded(): SeedResult = withContext(Dispatchers.IO) {
+ if (settingsRepository.isExerciseSeedComplete()) {
+ val repaired = repairExerciseTrackingTypes()
+ return@withContext SeedResult(
+ seeded = false,
+ reason = if (repaired > 0) "already_seeded_repaired_tracking_types" else "already_seeded",
+ count = repaired.takeIf { it > 0 },
+ )
+ }
+
+ val rows = loadPayload().exercises.filter { !it.name.isNullOrBlank() }
+ val existing = exerciseBox.all
+ val existingKeys = existing.map { it.normalizedName }.toMutableSet()
+ val insertedByKey = linkedMapOf>()
+ val now = System.currentTimeMillis()
+
+ val exercisesToPut = mutableListOf()
+ for (entry in rows) {
+ val name = entry.name.orEmpty().trim()
+ val normalizedName = normalizeName(name)
+ if (normalizedName.isBlank() || existingKeys.contains(normalizedName)) continue
+ existingKeys.add(normalizedName)
+ val entity = ExerciseEntity().apply {
+ uid = entry.id?.takeIf { it.isNotBlank() } ?: uid
+ this.name = name
+ this.normalizedName = normalizedName
+ primaryMuscle = toTitleCase(entry.primaryMuscle ?: entry.primaryMuscles?.firstOrNull() ?: "Other")
+ equipment = normalizeEquipment(entry.equipment)
+ category = normalizeCategory(entry)
+ isCustom = false
+ source = "built_in"
+ notes = entry.notes?.toString() ?: ""
+ createdAt = now
+ updatedAt = now
+ equipmentDetail = entry.equipmentDetail
+ apparatusJson = entry.apparatus?.let { json.encodeToString(it) }
+ trackingType = ExerciseTrackingTypeNormalizer.normalize(
+ name = name,
+ category = category,
+ equipment = equipment,
+ explicitTrackingType = entry.trackingType,
+ )
+ isBodyweight = entry.isBodyweight == true
+ requiresExternalLoad = entry.requiresExternalLoad == true
+ movementPattern = entry.movementPattern
+ difficulty = entry.difficulty
+ aliasesJson = entry.aliases?.let { json.encodeToString(it) }
+ sourceTagsJson = entry.sourceTags?.let { json.encodeToString(it) }
+ }
+ exercisesToPut += entity
+ insertedByKey[normalizedName] = entity to entry
+ }
+
+ exercisesToPut.chunked(BATCH_SIZE).forEach { exerciseBox.put(it) }
+
+ val muscleRows = mutableListOf()
+ for ((_, pair) in insertedByKey) {
+ val (exercise, source) = pair
+ buildMuscleRows(source).forEach { muscleRow ->
+ muscleRows += ExerciseMuscleEntity().apply {
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ muscle = muscleRow.muscle
+ role = muscleRow.role
+ contributionFraction = muscleRow.contribution
+ createdAt = now
+ updatedAt = now
+ }
+ }
+ }
+ muscleRows.chunked(BATCH_SIZE).forEach { muscleBox.put(it) }
+
+ settingsRepository.markExerciseSeedComplete()
+ repairExerciseTrackingTypes()
+ SeedResult(seeded = true, count = rows.size)
+ }
+
+ suspend fun backfillExerciseMusclesIfNeeded(): BackfillResult = withContext(Dispatchers.IO) {
+ if (muscleBox.count() > 0) {
+ return@withContext BackfillResult(backfilled = false, reason = "already_populated")
+ }
+
+ val libraryByName = loadPayload().exercises
+ .filter { !it.name.isNullOrBlank() }
+ .associateBy { normalizeName(it.name) }
+
+ val allExercises = exerciseBox.all
+ val now = System.currentTimeMillis()
+ val muscleRows = mutableListOf()
+ for (exercise in allExercises) {
+ val sourceEntry = libraryByName[exercise.normalizedName] ?: continue
+ buildMuscleRows(sourceEntry).forEach { row ->
+ muscleRows += ExerciseMuscleEntity().apply {
+ this.exercise.target = exercise
+ exerciseUid = exercise.uid
+ muscle = row.muscle
+ role = row.role
+ contributionFraction = row.contribution
+ createdAt = now
+ updatedAt = now
+ }
+ }
+ }
+
+ if (muscleRows.isEmpty()) return@withContext BackfillResult(backfilled = false, reason = "no_exercises_matched")
+ muscleRows.chunked(BATCH_SIZE).forEach { muscleBox.put(it) }
+ BackfillResult(backfilled = true, count = muscleRows.size)
+ }
+
+ private fun loadPayload(): ExerciseSeedPayload {
+ val text = context.assets.open("exerciseLibrary.json").bufferedReader().use { it.readText() }
+ return json.decodeFromString(ExerciseSeedPayload.serializer(), text)
+ }
+
+ private fun repairExerciseTrackingTypes(): Int {
+ val changed = exerciseBox.all.mapNotNull { exercise ->
+ val normalized = ExerciseTrackingTypeNormalizer.normalize(
+ name = exercise.name,
+ category = exercise.category,
+ equipment = exercise.equipment,
+ explicitTrackingType = exercise.trackingType,
+ )
+ if (exercise.trackingType == normalized) null else {
+ exercise.trackingType = normalized
+ exercise.updatedAt = System.currentTimeMillis()
+ exercise
+ }
+ }
+ if (changed.isNotEmpty()) changed.chunked(BATCH_SIZE).forEach { exerciseBox.put(it) }
+ return changed.size
+ }
+
+ private data class MuscleSeedRow(val muscle: String, val role: String, val contribution: Double)
+
+ private fun buildMuscleRows(exercise: ExerciseSeedEntry): List {
+ val primary = (exercise.primaryMuscles?.filter { it.isNotBlank() }
+ ?: listOfNotNull(exercise.primaryMuscle?.takeIf { it.isNotBlank() }))
+ val secondary = exercise.secondaryMuscles?.filter { it.isNotBlank() }.orEmpty()
+ if (primary.isEmpty() && secondary.isEmpty()) return emptyList()
+ if (secondary.isEmpty()) {
+ val each = 1.0 / max(primary.size, 1)
+ return primary.map { MuscleSeedRow(toTitleCase(it), "primary", each) }
+ }
+ val primaryWeight = 0.7 / max(primary.size, 1)
+ val secondaryWeight = 0.3 / max(secondary.size, 1)
+ return primary.map { MuscleSeedRow(toTitleCase(it), "primary", primaryWeight) } +
+ secondary.map { MuscleSeedRow(toTitleCase(it), "secondary", secondaryWeight) }
+ }
+
+ private fun toTitleCase(value: String?): String = value.orEmpty()
+ .trim()
+ .split(Regex("\\s+"))
+ .filter { it.isNotBlank() }
+ .joinToString(" ") { part ->
+ part.lowercase(Locale.ROOT).replaceFirstChar { ch -> ch.titlecase(Locale.ROOT) }
+ }
+
+ // Uses the String overload of normalizeExerciseNameKey (underscores format, from ExerciseUiFilters)
+ // so that stored normalizedName values are consistent with what createCustomExercise stores
+ // and what the duplicate-name guard queries.
+ private fun normalizeName(value: String?): String = normalizeExerciseNameKey(value.orEmpty().trim())
+
+ private fun normalizeEquipment(value: String?): String {
+ val raw = value.orEmpty().trim()
+ return if (raw.isBlank()) "Other" else toTitleCase(raw)
+ }
+
+ private fun normalizeCategory(exercise: ExerciseSeedEntry): String {
+ val fromCategory = exercise.category.orEmpty().lowercase(Locale.ROOT)
+ return when {
+ fromCategory.contains("cardio") || fromCategory.contains("conditioning") -> "cardio"
+ fromCategory.contains("stretch") || fromCategory.contains("mobility") -> "mobility"
+ else -> "strength"
+ }
+ }
+
+ companion object { private const val BATCH_SIZE = 150 }
+}
diff --git a/app/src/main/java/com/ironlog/app/data/seed/ProgramTemplates.kt b/app/src/main/java/com/ironlog/app/data/seed/ProgramTemplates.kt
new file mode 100644
index 0000000..23aaec8
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/data/seed/ProgramTemplates.kt
@@ -0,0 +1,1381 @@
+package com.ironlog.app.data.seed
+
+import com.ironlog.app.data.model.FullPlanDay
+import com.ironlog.app.data.model.FullPlanObject
+import com.ironlog.app.data.model.PlanExerciseInput
+
+data class ProgramTemplate(
+ val id: String,
+ val name: String,
+ val category: String,
+ val description: String,
+ val days: List,
+ val difficulty: String = "Intermediate",
+ val durationWeeks: Int = 4,
+)
+
+val PROGRAM_TEMPLATES: List = listOf(
+ ProgramTemplate(
+ id = "aesthetic-split-default",
+ name = "Aesthetic Split",
+ category = "AESTHETIC",
+ description = "4 days, cutting phase, focused on lats, side delts, abs, and legs",
+ days = listOf(
+ FullPlanDay("PUSH", "#FF4500", listOf(
+ PlanExerciseInput(name = "Incline Smith Press", sets = 4, reps = "8–10", restSeconds = 90, isWarmup = false, notes = "Full stretch at bottom, squeeze at top."),
+ PlanExerciseInput(name = "Cable Fly Low to High", sets = 3, reps = "12–15", restSeconds = 90, isWarmup = false, notes = "Cables at lowest point, pull upward in arc."),
+ PlanExerciseInput(name = "Cable Lateral Raise Single Arm", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "3-second negative. Lead with elbow."),
+ PlanExerciseInput(name = "DB Lateral Raise", sets = 3, reps = "15–20", restSeconds = 90, isWarmup = false, notes = "Slight forward lean. Elbow leads."),
+ PlanExerciseInput(name = "Rope Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "Flare rope at bottom. Elbows pinned."),
+ PlanExerciseInput(name = "Single Arm Overhead Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "Long head stretch. Slow eccentric."),
+ PlanExerciseInput(name = "Weighted Cable Crunch", sets = 4, reps = "15–20", restSeconds = 90, isWarmup = false, notes = "Crunch into hips not knees.")
+ )),
+ FullPlanDay("PULL", "#0080FF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6–8", restSeconds = 90, isWarmup = false, notes = "Best lat builder. Add weight progressively."),
+ PlanExerciseInput(name = "Single Arm DB Row", sets = 4, reps = "10–12", restSeconds = 90, isWarmup = false, notes = "Incline bench 30 degrees. Pull elbow back."),
+ PlanExerciseInput(name = "Single Arm Cable Pulldown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "Lie chest-down on incline bench."),
+ PlanExerciseInput(name = "DB Shrugs", sets = 4, reps = "15–20", restSeconds = 90, isWarmup = false, notes = "1-second hold at top."),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "Brachialis = thicker arm silhouette."),
+ PlanExerciseInput(name = "Incline DB Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "Full long head stretch. Builds the peak."),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 4, reps = "12–15", restSeconds = 90, isWarmup = false, notes = "Add ankle weights when easy.")
+ )),
+ FullPlanDay("LEGS", "#00C170", listOf(
+ PlanExerciseInput(name = "Hip 90/90 Stretch", sets = 2, reps = "60s each side", restSeconds = 90, isWarmup = true, notes = "Non-negotiable warmup."),
+ PlanExerciseInput(name = "Worlds Greatest Stretch", sets = 2, reps = "5 reps each side", restSeconds = 90, isWarmup = true, notes = "T-spine plus hip flexor plus hamstring."),
+ PlanExerciseInput(name = "Bulgarian Split Squat", sets = 4, reps = "8–10 each leg", restSeconds = 90, isWarmup = false, notes = "Front shin vertical. Go deep."),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = "Hip hinge equals running power."),
+ PlanExerciseInput(name = "Leg Press High Feet", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "High foot placement shifts load."),
+ PlanExerciseInput(name = "Lateral Band Walk", sets = 3, reps = "15 steps each way", restSeconds = 90, isWarmup = false, notes = "Lateral stability for cutting."),
+ PlanExerciseInput(name = "Single Leg Calf Raise", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = "On a step for full ROM."),
+ PlanExerciseInput(name = "Ankle Mobility Drill", sets = 2, reps = "60s each side", restSeconds = 90, isWarmup = true, notes = "Cooldown. Do not skip.")
+ )),
+ FullPlanDay("UPPER", "#A020F0", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up or Lat Pulldown", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = "Second lat session. Full stretch."),
+ PlanExerciseInput(name = "Cable Lateral Raise Single Arm", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "Second hit this week. 3s negative."),
+ PlanExerciseInput(name = "DB Shrugs", sets = 3, reps = "20", restSeconds = 90, isWarmup = false, notes = "Push weight up from Pull day."),
+ PlanExerciseInput(name = "Preacher Curl", sets = 3, reps = "10–12", restSeconds = 90, isWarmup = false, notes = "No cheating possible."),
+ PlanExerciseInput(name = "Rope Overhead Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "Long head. Makes arms look big."),
+ PlanExerciseInput(name = "Weighted Cable Crunch", sets = 4, reps = "15–20", restSeconds = 90, isWarmup = false, notes = "Heavier than Push day."),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "Add ankle weights."),
+ PlanExerciseInput(name = "Ab Wheel Rollout", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "Hardest ab exercise.")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "full_body_beginner_3x",
+ name = "Full Body Beginner (3x/week)",
+ category = "BEGINNER",
+ description = "Simple full-body progression.",
+ days = listOf(
+ FullPlanDay("FULL BODY A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("FULL BODY B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 2, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("FULL BODY C", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 2, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "minimalist_full_body_23",
+ name = "Minimalist Full Body (2-3 Day)",
+ category = "BEGINNER",
+ description = "Time-efficient full-body essentials.",
+ days = listOf(
+ FullPlanDay("MINIMAL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("MINIMAL B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("MINIMAL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "upper_lower_beginner_4x",
+ name = "Upper / Lower Beginner (4x/week)",
+ category = "BEGINNER",
+ description = "Balanced upper/lower split.",
+ days = listOf(
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "bodyweight_beginner",
+ name = "Bodyweight Beginner",
+ category = "BEGINNER",
+ description = "No-gym bodyweight basics.",
+ days = listOf(
+ FullPlanDay("CALI PUSH", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dips", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Sit-Up", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CALI PULL", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Inverted Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Single-Leg Romanian Deadlift", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CALI MIXED", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Bodyweight Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Split Squat", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Glute Bridge", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "upper_lower_strength_4x",
+ name = "Upper / Lower Strength Focus (4x/week)",
+ category = "STRENGTH",
+ description = "Power + volume blend.",
+ days = listOf(
+ FullPlanDay("UPPER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "4", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 2, reps = "3", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "novice_barbell_strength",
+ name = "Novice Barbell Strength",
+ category = "STRENGTH",
+ description = "Linear barbell progression.",
+ days = listOf(
+ FullPlanDay("WORKOUT A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("WORKOUT B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 1, reps = "5", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("WORKOUT C", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Barbell Press", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "powerbuilding_4_day",
+ name = "Powerbuilding 4-Day",
+ category = "STRENGTH",
+ description = "Strength first, size second.",
+ days = listOf(
+ FullPlanDay("UPPER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "4", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 2, reps = "3", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PUSH B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Barbell Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "powerbuilding_5_day",
+ name = "Powerbuilding 5-Day",
+ category = "STRENGTH",
+ description = "Higher-frequency powerbuilding.",
+ days = listOf(
+ FullPlanDay("UPPER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "4", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 2, reps = "3", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PUSH A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Back Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "pure_hypertrophy_5_day",
+ name = "Pure Hypertrophy 5-Day",
+ category = "HYPERTROPHY",
+ description = "High-volume growth split.",
+ days = listOf(
+ FullPlanDay("PUSH A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "ppl_moderate_5x",
+ name = "Push / Pull / Legs Moderate (5x/week)",
+ category = "HYPERTROPHY",
+ description = "Moderate-frequency PPL.",
+ days = listOf(
+ FullPlanDay("PUSH A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PUSH B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Barbell Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Back Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "ppl_classic_6x",
+ name = "Push / Pull / Legs Classic (6x/week)",
+ category = "HYPERTROPHY",
+ description = "Classic high-frequency PPL.",
+ days = listOf(
+ FullPlanDay("PUSH A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PUSH B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Barbell Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Back Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "bro_split_5x",
+ name = "Bro Split (5x/week)",
+ category = "HYPERTROPHY",
+ description = "Single-muscle focus days.",
+ days = listOf(
+ FullPlanDay("CHEST", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Skull Crusher", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BACK", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 5, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("ARMS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Curl", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "EZ-Bar Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "arnold_split_6x",
+ name = "Arnold Split (6x/week)",
+ category = "HYPERTROPHY",
+ description = "Classic high-volume pairing split.",
+ days = listOf(
+ FullPlanDay("CHEST + BACK (HEAVY)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS + ARMS (HEAVY)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Skull Crusher", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS (HEAVY)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CHEST + BACK (VOLUME)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS + ARMS (VOLUME)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS (VOLUME)", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "mens_aesthetic_v_taper",
+ name = "Men's Aesthetic V-Taper Program",
+ category = "AESTHETIC",
+ description = "Shoulders and lats emphasis.",
+ days = listOf(
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 5, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BACK", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("ARMS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Curl", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "EZ-Bar Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "lean_physique_recomp",
+ name = "Lean Physique Recomp Program",
+ category = "AESTHETIC",
+ description = "Lifting + conditioning recomposition.",
+ days = listOf(
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "upper_body_bias_program",
+ name = "Upper Body Bias Program",
+ category = "AESTHETIC",
+ description = "Upper-focused with lower maintenance.",
+ days = listOf(
+ FullPlanDay("UPPER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 5, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "glute_legs_focus_45",
+ name = "Glute & Legs Focus (4-5x/week)",
+ category = "LOWER_BODY_GLUTES",
+ description = "Lower-body dominant volume.",
+ days = listOf(
+ FullPlanDay("GLUTE + QUAD", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 2, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("GLUTE + HAM", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("GLUTE PUMP", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 2, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "womens_lower_body_focus",
+ name = "Women's Lower Body Focus",
+ category = "LOWER_BODY_GLUTES",
+ description = "Lower-body emphasis with upper support.",
+ days = listOf(
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "athletic_legs_program",
+ name = "Athletic Legs Program",
+ category = "LOWER_BODY_GLUTES",
+ description = "Power + conditioning lower split.",
+ days = listOf(
+ FullPlanDay("LOWER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "4", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 2, reps = "3", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LEGS A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "arm_specialization_block",
+ name = "Arm Specialization Block",
+ category = "SPECIALIZATION",
+ description = "Extra direct arm volume.",
+ days = listOf(
+ FullPlanDay("ARMS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Curl", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "EZ-Bar Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Back Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("ARMS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Curl", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "EZ-Bar Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "chest_specialization_block",
+ name = "Chest Specialization Block",
+ category = "SPECIALIZATION",
+ description = "Chest-priority frequency block.",
+ days = listOf(
+ FullPlanDay("CHEST", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Skull Crusher", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CHEST", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Skull Crusher", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "back_width_thickness_block",
+ name = "Back Width + Thickness Block",
+ category = "SPECIALIZATION",
+ description = "Dual-focus back growth block.",
+ days = listOf(
+ FullPlanDay("BACK", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PULL A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BACK", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("ARMS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Curl", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "EZ-Bar Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "shoulder_specialization_block",
+ name = "Shoulder Specialization Block",
+ category = "SPECIALIZATION",
+ description = "High-frequency delt block.",
+ days = listOf(
+ FullPlanDay("SHOULDERS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 5, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Calf Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("SHOULDERS", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Overhead Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 5, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("PUSH B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Barbell Press", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Tricep Extension", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Cable Fly", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "home_dumbbell_only_program",
+ name = "Home Dumbbell Only Program",
+ category = "HOME_MINIMAL",
+ description = "No-machine home split.",
+ days = listOf(
+ FullPlanDay("HOME UPPER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Dumbbell Bench Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "One-Arm Dumbbell Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Goblet Squat", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "60", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME UPPER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Dumbbell Bench Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "One-Arm Dumbbell Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Goblet Squat", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "60", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "home_dumbbell_bench_program",
+ name = "Home Dumbbell + Bench Program",
+ category = "HOME_MINIMAL",
+ description = "Home split with bench options.",
+ days = listOf(
+ FullPlanDay("HOME PUSH", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Dumbbell Bench Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dumbbell Shoulder Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Goblet Squat", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "60", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME PULL", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "One-Arm Dumbbell Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "One-Arm Dumbbell Row", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Back Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("HOME LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Goblet Squat", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Romanian Deadlift", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "60", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "resistance_band_only_program",
+ name = "Resistance Band Only Program",
+ category = "HOME_MINIMAL",
+ description = "Portable resistance-band routine.",
+ days = listOf(
+ FullPlanDay("BAND UPPER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Row", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Curl", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BAND LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Band Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Glute Bridge", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Calf Raise", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BAND UPPER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Row", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Curl", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("BAND LOWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Band Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Glute Bridge", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Band Calf Raise", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "calisthenics_strength_base",
+ name = "Calisthenics Strength Base",
+ category = "BODYWEIGHT_CALISTHENICS",
+ description = "Bodyweight strength progression.",
+ days = listOf(
+ FullPlanDay("CALI PUSH", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Dips", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Sit-Up", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CALI PULL", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Inverted Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Single-Leg Romanian Deadlift", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CALI MIXED", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Bodyweight Squat", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Split Squat", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Glute Bridge", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "8", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CALI PULL", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Inverted Row", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Single-Leg Romanian Deadlift", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Push-Up", sets = 4, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "fat_loss_conditioning_lifting_hybrid",
+ name = "Fat Loss Conditioning + Lifting Hybrid",
+ category = "FAT_LOSS_CONDITIONING",
+ description = "Alternating lift and conditioning days.",
+ days = listOf(
+ FullPlanDay("FULL BODY A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("FULL BODY B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 2, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "interference_aware_recomp",
+ name = "Interference-Aware Fat Loss / Recomp",
+ category = "FAT_LOSS_CONDITIONING",
+ description = "Recovery-aware lifting and conditioning split.",
+ days = listOf(
+ FullPlanDay("UPPER A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Pull-Up", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Hack Squat", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Extension", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 4, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "lift_3day_cardio_2day",
+ name = "3-Day Lift + 2-Day Cardio Plan",
+ category = "FAT_LOSS_CONDITIONING",
+ description = "Simple split with cardio built in.",
+ days = listOf(
+ FullPlanDay("FULL BODY A", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 3, reps = "45", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("FULL BODY B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Deadlift", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "8", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 2, reps = "15", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("FULL BODY C", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Front Squat", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Seated Cable Row", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 2, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ ),
+ ProgramTemplate(
+ id = "athletic_conditioning_program",
+ name = "Athletic Conditioning Program",
+ category = "FAT_LOSS_CONDITIONING",
+ description = "Athletic engine + strength emphasis.",
+ days = listOf(
+ FullPlanDay("UPPER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Bench Press", sets = 4, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Weighted Pull-Up", sets = 4, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Overhead Press", sets = 3, reps = "5", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Barbell Row", sets = 3, reps = "6", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("LOWER POWER", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Barbell Squat", sets = 4, reps = "4", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Deadlift", sets = 2, reps = "3", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Leg Curl", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Standing Calf Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Walking Lunge", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hip Thrust", sets = 3, reps = "10", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("UPPER B", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Incline Dumbbell Press", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lat Pulldown", sets = 4, reps = "10", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Lateral Raise", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Face Pull", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hammer Curl", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Tricep Pushdown", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ )),
+ FullPlanDay("CONDITIONING", "#4C6FFF", listOf(
+ PlanExerciseInput(name = "Air Bike", sets = 6, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Reverse Crunch", sets = 3, reps = "15", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Plank", sets = 4, reps = "45", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Running", sets = 4, reps = "400", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Spider Crawl", sets = 4, reps = "20", restSeconds = 90, isWarmup = false, notes = ""),
+ PlanExerciseInput(name = "Hanging Leg Raise", sets = 3, reps = "12", restSeconds = 90, isWarmup = false, notes = "")
+ ))
+ ),
+ )
+)
+
+fun ProgramTemplate.toPlanObject(): FullPlanObject = FullPlanObject(
+ name = name,
+ goal = category,
+ description = description,
+ days = days,
+)
diff --git a/app/src/main/java/com/ironlog/app/domain/ai/ExerciseResolutionEngine.kt b/app/src/main/java/com/ironlog/app/domain/ai/ExerciseResolutionEngine.kt
new file mode 100644
index 0000000..1dbc7b6
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/ai/ExerciseResolutionEngine.kt
@@ -0,0 +1,234 @@
+package com.ironlog.app.domain.ai
+
+import com.ironlog.app.data.model.LegacyExerciseShape
+import com.ironlog.app.util.normalizeExerciseNameKey
+
+enum class ResolutionStatus {
+ MATCHED,
+ NEEDS_REVIEW,
+ UNRESOLVED,
+}
+
+data class ExerciseResolution(
+ val status: ResolutionStatus,
+ val matched: LegacyExerciseShape? = null,
+ val confidence: Int = 0,
+ val reason: String = "",
+ val topCandidates: List> = emptyList(),
+)
+
+object ExerciseResolutionEngine {
+ private const val STRONG_MATCH_THRESHOLD = 88
+ private const val REVIEW_MATCH_THRESHOLD = 52
+ private val MUSCLE_HINTS = mapOf(
+ "chest" to setOf("chest", "pec", "pecs", "pectoral"),
+ "back" to setOf("back", "lat", "lats", "row"),
+ "shoulders" to setOf("shoulder", "shoulders", "delt", "delts"),
+ "biceps" to setOf("bicep", "biceps", "curl"),
+ "triceps" to setOf("tricep", "triceps", "pushdown"),
+ "quads" to setOf("quad", "quads", "thigh"),
+ "hamstrings" to setOf("hamstring", "hamstrings"),
+ "glutes" to setOf("glute", "glutes"),
+ "calves" to setOf("calf", "calves"),
+ "core" to setOf("core", "abs", "ab", "abdominal"),
+ "forearms" to setOf("forearm", "forearms", "grip"),
+ "traps" to setOf("trap", "traps", "shrug"),
+ "cardio" to setOf("cardio", "run", "bike", "treadmill", "rower"),
+ )
+ private val EQUIPMENT_HINTS = mapOf(
+ "barbell" to setOf("barbell", "bb"),
+ "dumbbell" to setOf("dumbbell", "db"),
+ "cable" to setOf("cable"),
+ "machine" to setOf("machine", "smith"),
+ "bodyweight" to setOf("bodyweight", "bw", "pullup", "pushup", "dip"),
+ "band" to setOf("band"),
+ "kettlebell" to setOf("kettlebell", "kb"),
+ )
+ private val MOVEMENT_HINTS = mapOf(
+ "push" to setOf("push", "press"),
+ "pull" to setOf("pull", "row"),
+ "hinge" to setOf("hinge", "deadlift", "rdl"),
+ "squat" to setOf("squat", "legpress"),
+ "lunge" to setOf("lunge", "split squat"),
+ "isolation" to setOf("curl", "extension", "raise", "fly"),
+ "conditioning" to setOf("conditioning", "metcon", "interval"),
+ )
+
+ fun resolve(name: String, all: List): ExerciseResolution {
+ val normalized = normalizeExerciseNameKey(name)
+ if (normalized.isBlank()) {
+ return ExerciseResolution(
+ status = ResolutionStatus.UNRESOLVED,
+ confidence = 0,
+ reason = "Blank exercise name",
+ )
+ }
+
+ val exact = all.firstOrNull { normalizeExerciseNameKey(it.name) == normalized }
+ if (exact != null) {
+ return ExerciseResolution(
+ status = ResolutionStatus.MATCHED,
+ matched = exact,
+ confidence = 100,
+ reason = "Exact normalized name",
+ )
+ }
+
+ val aliasExact = all.firstOrNull { ex -> ex.aliases.any { normalizeExerciseNameKey(it) == normalized } }
+ if (aliasExact != null) {
+ return ExerciseResolution(
+ status = ResolutionStatus.MATCHED,
+ matched = aliasExact,
+ confidence = 98,
+ reason = "Alias exact match",
+ )
+ }
+
+ val ranked = all.map { candidate ->
+ val score = scoreSimilarity(normalized, candidate)
+ candidate to score
+ // Stable deterministic sort: primary by score desc, secondary by name asc so ties are repeatable.
+ }.sortedWith(compareByDescending> { it.second }.thenBy { it.first.name })
+
+ val best = ranked.firstOrNull() ?: return ExerciseResolution(
+ status = ResolutionStatus.UNRESOLVED,
+ confidence = 0,
+ reason = "No library candidates",
+ )
+ val top = ranked.take(6)
+
+ val bestCandidate = best.first
+ val bestScore = best.second
+ return when {
+ bestScore >= STRONG_MATCH_THRESHOLD -> ExerciseResolution(
+ status = ResolutionStatus.MATCHED,
+ matched = bestCandidate,
+ confidence = bestScore,
+ reason = "High-confidence fuzzy match",
+ topCandidates = top,
+ )
+
+ bestScore >= REVIEW_MATCH_THRESHOLD -> ExerciseResolution(
+ status = ResolutionStatus.NEEDS_REVIEW,
+ matched = bestCandidate,
+ confidence = bestScore,
+ reason = "Ambiguous match candidate",
+ topCandidates = top,
+ )
+
+ else -> ExerciseResolution(
+ status = ResolutionStatus.UNRESOLVED,
+ confidence = bestScore,
+ reason = "Low similarity",
+ topCandidates = top,
+ )
+ }
+ }
+
+ private fun scoreSimilarity(input: String, candidate: LegacyExerciseShape): Int {
+ val candidateName = normalizeExerciseNameKey(candidate.name)
+ val inputTokens = tokenize(input).toSet()
+ val candidateTokens = tokenize(candidateName).toSet()
+ val nameTokenScore = tokenJaccardScore(input, candidateName)
+ val editScore = editSimilarityScore(input, candidateName)
+ // Substring / prefix bonuses.
+ val containsBonus = when {
+ input == candidateName -> 15
+ (input.contains(candidateName) || candidateName.contains(input)) &&
+ kotlin.math.abs(input.length - candidateName.length) <= 6 -> 10
+ else -> 0
+ }
+ // Prefix token bonus: reward when the input tokens are a leading subset of the candidate tokens.
+ val prefixTokenBonus = run {
+ val cTokenList = tokenize(candidateName)
+ val iTokenList = tokenize(input)
+ if (iTokenList.isNotEmpty() && cTokenList.size >= iTokenList.size &&
+ cTokenList.take(iTokenList.size) == iTokenList) 8 else 0
+ }
+ val extraInputPenalty = ((inputTokens - candidateTokens).size * 3).coerceAtMost(9)
+ val extraCandidatePenalty = ((candidateTokens - inputTokens).size * 2).coerceAtMost(6)
+ val typoTokenBonus = fuzzyTokenBonus(inputTokens, candidateTokens)
+ val aliasTokenScore = candidate.aliases.maxOfOrNull {
+ tokenJaccardScore(input, normalizeExerciseNameKey(it)).coerceAtLeast(editSimilarityScore(input, normalizeExerciseNameKey(it)))
+ } ?: 0
+ val hintBonus = hintBonusScore(input, candidate)
+ val base = ((nameTokenScore * 0.52) + (editScore * 0.48)).toInt()
+ val weighted = base + containsBonus + prefixTokenBonus + hintBonus + typoTokenBonus - extraInputPenalty - extraCandidatePenalty
+ return weighted.coerceAtLeast(aliasTokenScore + hintBonus).coerceIn(0, 100)
+ }
+
+ private fun tokenJaccardScore(a: String, b: String): Int {
+ val ta = tokenize(a).toSet()
+ val tb = tokenize(b).toSet()
+ if (ta.isEmpty() || tb.isEmpty()) return 0
+ val overlap = ta.intersect(tb).size.toDouble()
+ val union = ta.union(tb).size.toDouble()
+ return ((overlap / union) * 100.0).toInt().coerceIn(0, 100)
+ }
+
+ private fun editSimilarityScore(a: String, b: String): Int {
+ if (a.isBlank() || b.isBlank()) return 0
+ val dist = damerauLevenshteinDistance(a, b)
+ val maxLen = maxOf(a.length, b.length).coerceAtLeast(1)
+ return ((1.0 - (dist.toDouble() / maxLen.toDouble())) * 100.0).toInt().coerceIn(0, 100)
+ }
+
+ // Optimal-string-alignment variant; good typo tolerance for adjacent swaps ("teh" -> "the").
+ private fun damerauLevenshteinDistance(a: String, b: String): Int {
+ val m = a.length
+ val n = b.length
+ if (m == 0) return n
+ if (n == 0) return m
+ val dp = Array(m + 1) { IntArray(n + 1) }
+ for (i in 0..m) dp[i][0] = i
+ for (j in 0..n) dp[0][j] = j
+ for (i in 1..m) {
+ for (j in 1..n) {
+ val cost = if (a[i - 1] == b[j - 1]) 0 else 1
+ var best = minOf(
+ dp[i - 1][j] + 1,
+ dp[i][j - 1] + 1,
+ dp[i - 1][j - 1] + cost,
+ )
+ if (i > 1 && j > 1 && a[i - 1] == b[j - 2] && a[i - 2] == b[j - 1]) {
+ best = minOf(best, dp[i - 2][j - 2] + 1)
+ }
+ dp[i][j] = best
+ }
+ }
+ return dp[m][n]
+ }
+
+ private fun hintBonusScore(input: String, candidate: LegacyExerciseShape): Int {
+ val inputTokens = tokenize(input).toSet()
+ var bonus = 0
+ val muscleKey = candidate.primaryMuscle?.lowercase()?.trim()
+ if (!muscleKey.isNullOrBlank()) {
+ val hints = MUSCLE_HINTS[muscleKey]
+ if (!hints.isNullOrEmpty() && hints.any { it in inputTokens }) bonus += 8
+ }
+ val equipKey = candidate.equipment.lowercase().trim()
+ val equipHints = EQUIPMENT_HINTS[equipKey]
+ if (!equipHints.isNullOrEmpty() && equipHints.any { it in inputTokens }) bonus += 7
+ val movementKey = candidate.movementPattern?.lowercase()?.trim()
+ val movementHints = movementKey?.let { MOVEMENT_HINTS[it] }
+ if (!movementHints.isNullOrEmpty() && movementHints.any { it in inputTokens }) bonus += 6
+ return bonus
+ }
+
+ private fun tokenize(value: String): List = value
+ .split(Regex("[\\s_\\-]+"))
+ .map { it.trim() }
+ .filter { it.isNotBlank() }
+
+ private fun fuzzyTokenBonus(inputTokens: Set, candidateTokens: Set): Int {
+ if (inputTokens.isEmpty() || candidateTokens.isEmpty()) return 0
+ var bonus = 0
+ for (token in inputTokens) {
+ val best = candidateTokens.maxOfOrNull { editSimilarityScore(token, it) } ?: 0
+ if (best >= 82) bonus += 5
+ else if (best >= 70) bonus += 3
+ }
+ return bonus.coerceAtMost(14)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/ai/SmartPlanStructuringEngine.kt b/app/src/main/java/com/ironlog/app/domain/ai/SmartPlanStructuringEngine.kt
new file mode 100644
index 0000000..fa95014
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/ai/SmartPlanStructuringEngine.kt
@@ -0,0 +1,211 @@
+package com.ironlog.app.domain.ai
+
+import com.ironlog.app.data.model.FullPlanDay
+import com.ironlog.app.data.model.FullPlanObject
+import com.ironlog.app.data.model.LegacyExerciseShape
+import com.ironlog.app.data.model.PlanExerciseInput
+import com.ironlog.app.util.normalizeExerciseNameKey
+import kotlin.math.max
+
+data class SmartPlanStructuringResult(
+ val plan: FullPlanObject,
+ val notes: List,
+ val insertedWarmupRows: Int,
+ val suggestedSupersetRows: Int,
+ val adjustedRestRows: Int,
+)
+
+private data class ExerciseProfile(
+ val trackingType: String,
+ val movementPattern: String?,
+ val category: String,
+ val equipment: String,
+ val primaryMuscle: String?,
+)
+
+object SmartPlanStructuringEngine {
+ private val COMPOUND_PATTERNS = setOf("push", "pull", "squat", "hinge", "lunge", "carry")
+ private val SUPERSET_FRIENDLY_PATTERNS = setOf("isolation", "push", "pull")
+ private val SUPERSET_FRIENDLY_EQUIPMENT = setOf("cable", "dumbbell", "machine", "band")
+
+ fun structure(plan: FullPlanObject, library: List): SmartPlanStructuringResult {
+ val byId = library.associateBy { it.id }
+ val byName = library.associateBy { normalizeExerciseNameKey(it.name) }
+
+ var warmupAdds = 0
+ var supersetAdds = 0
+ var restAdjustments = 0
+ val notes = mutableListOf()
+
+ val newDays = plan.days.map { day ->
+ val baseRows = day.exercises.toMutableList()
+ val withWarmups = mutableListOf()
+ val warmedCompounds = mutableSetOf()
+
+ baseRows.forEach { row ->
+ val profile = resolveProfile(row, byId, byName)
+ val key = row.exerciseId ?: normalizeExerciseNameKey(row.name.orEmpty())
+ val isCompound = isCompound(profile)
+ val isWarmup = row.isWarmup == true
+ val isTime = isTimeBased(profile, row)
+
+ if (isCompound && !isWarmup && !isTime && !warmedCompounds.contains(key)) {
+ val hasWarmupAlready = baseRows.any { candidate ->
+ (candidate.exerciseId == row.exerciseId || normalizeExerciseNameKey(candidate.name.orEmpty()) == normalizeExerciseNameKey(row.name.orEmpty())) &&
+ candidate.isWarmup == true
+ }
+ if (!hasWarmupAlready) {
+ withWarmups += row.copy(
+ sets = 2,
+ reps = if (isTime) "45" else "8-10",
+ restSeconds = 60,
+ supersetGroup = null,
+ isWarmup = true,
+ notes = mergeNote(row.notes, "Auto warmup"),
+ )
+ warmupAdds++
+ }
+ warmedCompounds += key
+ }
+
+ val normalizedRest = normalizeRest(row, profile)
+ if (normalizedRest != (row.restSeconds ?: 0)) {
+ restAdjustments++
+ }
+ withWarmups += row.copy(restSeconds = normalizedRest)
+ }
+
+ val (withSupersets, daySupersetAdds) = applySupersetSuggestions(withWarmups, byId, byName)
+ supersetAdds += daySupersetAdds
+
+ FullPlanDay(
+ name = day.name,
+ color = day.color,
+ exercises = withSupersets,
+ )
+ }
+
+ if (warmupAdds > 0) notes += "Auto-added $warmupAdds warmup row(s) for first heavy compounds."
+ if (supersetAdds > 0) notes += "Suggested supersets for $supersetAdds exercise row(s)."
+ if (restAdjustments > 0) notes += "Normalized rest on $restAdjustments row(s) for better pacing."
+
+ return SmartPlanStructuringResult(
+ plan = plan.copy(days = newDays),
+ notes = notes,
+ insertedWarmupRows = warmupAdds,
+ suggestedSupersetRows = supersetAdds,
+ adjustedRestRows = restAdjustments,
+ )
+ }
+
+ private fun applySupersetSuggestions(
+ rows: List,
+ byId: Map,
+ byName: Map,
+ ): Pair, Int> {
+ val out = rows.toMutableList()
+ var counter = 0
+ var groupIndex = 0
+ var i = 0
+ while (i < out.lastIndex) {
+ val a = out[i]
+ val b = out[i + 1]
+ if (canSuggestSuperset(a, b, byId, byName)) {
+ val group = ('A'.code + (groupIndex % 26)).toChar().toString()
+ out[i] = a.copy(supersetGroup = group)
+ out[i + 1] = b.copy(supersetGroup = group)
+ counter += 2
+ groupIndex++
+ i += 2
+ continue
+ }
+ i++
+ }
+ return out to counter
+ }
+
+ private fun canSuggestSuperset(
+ a: PlanExerciseInput,
+ b: PlanExerciseInput,
+ byId: Map,
+ byName: Map,
+ ): Boolean {
+ if (a.isWarmup == true || b.isWarmup == true) return false
+ if (!a.supersetGroup.isNullOrBlank() || !b.supersetGroup.isNullOrBlank()) return false
+ val pa = resolveProfile(a, byId, byName)
+ val pb = resolveProfile(b, byId, byName)
+ if (isTimeBased(pa, a) || isTimeBased(pb, b)) return false
+ if (isCompound(pa) || isCompound(pb)) return false
+ val repA = extractRepFloor(a.reps)
+ val repB = extractRepFloor(b.reps)
+ if (repA < 8 || repB < 8) return false
+ val pattA = pa?.movementPattern?.lowercase()
+ val pattB = pb?.movementPattern?.lowercase()
+ val eqA = pa?.equipment?.lowercase().orEmpty()
+ val eqB = pb?.equipment?.lowercase().orEmpty()
+ val patOk = (pattA in SUPERSET_FRIENDLY_PATTERNS || eqA in SUPERSET_FRIENDLY_EQUIPMENT) &&
+ (pattB in SUPERSET_FRIENDLY_PATTERNS || eqB in SUPERSET_FRIENDLY_EQUIPMENT)
+ if (!patOk) return false
+ val mA = pa?.primaryMuscle?.lowercase().orEmpty()
+ val mB = pb?.primaryMuscle?.lowercase().orEmpty()
+ return mA.isNotBlank() && mB.isNotBlank() && mA != mB
+ }
+
+ private fun normalizeRest(row: PlanExerciseInput, profile: ExerciseProfile?): Int {
+ val current = row.restSeconds ?: 0
+ if (row.isWarmup == true) {
+ return if (current > 0) current.coerceIn(45, 90) else 60
+ }
+ if (isTimeBased(profile, row)) {
+ return if (current > 0) current.coerceIn(30, 75) else 45
+ }
+ return if (isCompound(profile)) {
+ if (current > 0) current.coerceIn(120, 210) else 150
+ } else {
+ if (current > 0) current.coerceIn(60, 120) else 75
+ }
+ }
+
+ private fun isCompound(profile: ExerciseProfile?): Boolean {
+ val pattern = profile?.movementPattern?.lowercase()
+ return pattern in COMPOUND_PATTERNS
+ }
+
+ private fun isTimeBased(profile: ExerciseProfile?, row: PlanExerciseInput): Boolean {
+ val tracking = profile?.trackingType?.lowercase().orEmpty()
+ if (tracking.startsWith("duration")) return true
+ val reps = row.reps.orEmpty().lowercase()
+ return "sec" in reps || "min" in reps || reps.endsWith("s")
+ }
+
+ private fun resolveProfile(
+ row: PlanExerciseInput,
+ byId: Map,
+ byName: Map,
+ ): ExerciseProfile? {
+ val matched = row.exerciseId?.let(byId::get) ?: byName[normalizeExerciseNameKey(row.name.orEmpty())]
+ return matched?.let {
+ ExerciseProfile(
+ trackingType = it.trackingType,
+ movementPattern = it.movementPattern,
+ category = it.category,
+ equipment = it.equipment,
+ primaryMuscle = it.primaryMuscle ?: it.primaryMuscles.firstOrNull(),
+ )
+ }
+ }
+
+ private fun extractRepFloor(raw: String?): Int {
+ val src = raw.orEmpty()
+ val ints = Regex("\\d+").findAll(src).map { it.value.toIntOrNull() ?: 0 }.toList()
+ if (ints.isEmpty()) return 0
+ return max(0, ints.minOrNull() ?: 0)
+ }
+
+ private fun mergeNote(current: String?, extra: String): String {
+ val base = current.orEmpty().trim()
+ if (base.isBlank()) return extra
+ if (base.contains(extra, ignoreCase = true)) return base
+ return "$base | $extra"
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/badges/BadgeDefinitions.kt b/app/src/main/java/com/ironlog/app/domain/badges/BadgeDefinitions.kt
new file mode 100644
index 0000000..3a98240
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/badges/BadgeDefinitions.kt
@@ -0,0 +1,146 @@
+package com.ironlog.app.domain.badges
+
+enum class BadgeTier { BRONZE, SILVER, GOLD, BLUE }
+
+/**
+ * Snapshot of user progress used to evaluate badge unlock conditions.
+ * Extend this as new metrics are tracked.
+ */
+data class AppStats(
+ val totalWorkouts: Int = 0,
+ val currentStreak: Int = 0,
+ val daysSinceFirstWorkout: Int = 0,
+ val totalVolumeKg: Double = 0.0,
+ val hasLoggedPR: Boolean = false,
+ val usedRestTimer: Boolean = false,
+ val createdPlan: Boolean = false,
+ val cloudAiActivated: Boolean = false,
+ val goalModesUsed: Set = emptySet(),
+ val currentRank: String = "E",
+ val weeksConsistent: Int = 0,
+ val consecutiveProgressionWorkouts: Int = 0,
+)
+
+/**
+ * Describes an achievement badge.
+ * Add new badges to [BadgeDefinitions.all] — the UI reads this list at runtime.
+ * [iconResName] is the drawable resource name (e.g. "ic_badge_dumbbell").
+ */
+data class BadgeDefinition(
+ val id: String,
+ val title: String,
+ val description: String,
+ val tier: BadgeTier,
+ val iconResName: String,
+ val unlockCondition: (AppStats) -> Boolean,
+)
+
+object BadgeDefinitions {
+
+ val all: List = listOf(
+ // ── BRONZE ────────────────────────────────────────────────────────────
+ BadgeDefinition(
+ id = "first_workout", title = "Iron Initiate",
+ description = "Complete your first workout", tier = BadgeTier.BRONZE,
+ iconResName = "ic_badge_dumbbell",
+ unlockCondition = { it.totalWorkouts >= 1 },
+ ),
+ BadgeDefinition(
+ id = "streak_3", title = "Spark",
+ description = "Achieve a 3-day workout streak", tier = BadgeTier.BRONZE,
+ iconResName = "ic_badge_flame",
+ unlockCondition = { it.currentStreak >= 3 },
+ ),
+ BadgeDefinition(
+ id = "first_rest_timer", title = "Patience",
+ description = "Use the rest timer for the first time", tier = BadgeTier.BRONZE,
+ iconResName = "ic_badge_hourglass",
+ unlockCondition = { it.usedRestTimer },
+ ),
+ BadgeDefinition(
+ id = "first_plan", title = "Architect",
+ description = "Create your first training plan", tier = BadgeTier.BRONZE,
+ iconResName = "ic_badge_twin_dumbbells",
+ unlockCondition = { it.createdPlan },
+ ),
+ // ── SILVER ────────────────────────────────────────────────────────────
+ BadgeDefinition(
+ id = "workouts_10", title = "Charged",
+ description = "Complete 10 workouts", tier = BadgeTier.SILVER,
+ iconResName = "ic_badge_lightning",
+ unlockCondition = { it.totalWorkouts >= 10 },
+ ),
+ BadgeDefinition(
+ id = "consistency_4w", title = "Clockwork",
+ description = "Train consistently for 4 weeks", tier = BadgeTier.SILVER,
+ iconResName = "ic_badge_calendar",
+ unlockCondition = { it.weeksConsistent >= 4 },
+ ),
+ BadgeDefinition(
+ id = "first_pr", title = "Muscle Memory",
+ description = "Log your first personal record", tier = BadgeTier.SILVER,
+ iconResName = "ic_badge_flexed_arm",
+ unlockCondition = { it.hasLoggedPR },
+ ),
+ BadgeDefinition(
+ id = "ai_activated", title = "Augmented",
+ description = "Activate Cloud AI coaching", tier = BadgeTier.SILVER,
+ iconResName = "ic_badge_atom",
+ unlockCondition = { it.cloudAiActivated },
+ ),
+ BadgeDefinition(
+ id = "progressive_streak", title = "Growth Curve",
+ description = "Progress in 4 consecutive workouts", tier = BadgeTier.SILVER,
+ iconResName = "ic_badge_chart",
+ unlockCondition = { it.consecutiveProgressionWorkouts >= 4 },
+ ),
+ // ── GOLD ──────────────────────────────────────────────────────────────
+ BadgeDefinition(
+ id = "workouts_50", title = "Champion",
+ description = "Complete 50 workouts", tier = BadgeTier.GOLD,
+ iconResName = "ic_badge_trophy",
+ unlockCondition = { it.totalWorkouts >= 50 },
+ ),
+ BadgeDefinition(
+ id = "streak_30", title = "Ironclad",
+ description = "Achieve a 30-day workout streak", tier = BadgeTier.GOLD,
+ iconResName = "ic_badge_shield",
+ unlockCondition = { it.currentStreak >= 30 },
+ ),
+ BadgeDefinition(
+ id = "workouts_100", title = "Sovereign",
+ description = "Complete 100 workouts", tier = BadgeTier.GOLD,
+ iconResName = "ic_badge_crown",
+ unlockCondition = { it.totalWorkouts >= 100 },
+ ),
+ BadgeDefinition(
+ id = "volume_milestone", title = "Summit",
+ description = "Lift 100,000 kg total volume", tier = BadgeTier.GOLD,
+ iconResName = "ic_badge_mountain",
+ unlockCondition = { it.totalVolumeKg >= 100_000.0 },
+ ),
+ // ── BLUE ──────────────────────────────────────────────────────────────
+ BadgeDefinition(
+ id = "member_365", title = "Eternal",
+ description = "365 days since your first workout", tier = BadgeTier.BLUE,
+ iconResName = "ic_badge_infinity",
+ unlockCondition = { it.daysSinceFirstWorkout >= 365 },
+ ),
+ BadgeDefinition(
+ id = "all_goal_modes", title = "Multiclass",
+ description = "Train with all 4 goal modes", tier = BadgeTier.BLUE,
+ iconResName = "ic_badge_3stars",
+ unlockCondition = { it.goalModesUsed.size >= 4 },
+ ),
+ BadgeDefinition(
+ id = "s_rank", title = "Diamond",
+ description = "Reach S-Rank status", tier = BadgeTier.BLUE,
+ iconResName = "ic_badge_diamond",
+ unlockCondition = { it.currentRank == "S" },
+ ),
+ )
+
+ /** Returns the set of badge IDs that are unlocked for the given [stats]. */
+ fun evaluate(stats: AppStats): Set =
+ all.filter { it.unlockCondition(stats) }.map { it.id }.toSet()
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/gamification/GamificationSummary.kt b/app/src/main/java/com/ironlog/app/domain/gamification/GamificationSummary.kt
new file mode 100644
index 0000000..9eb5b49
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/gamification/GamificationSummary.kt
@@ -0,0 +1,143 @@
+package com.ironlog.app.domain.gamification
+
+import com.ironlog.app.assets.ForgeFoxExpression
+import com.ironlog.app.ui.model.HistoryEntry
+import java.time.Instant
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.ZoneId
+import java.time.ZoneOffset
+import java.time.temporal.ChronoUnit
+
+enum class DailyProofStatus {
+ SETUP,
+ ACTIVE_WORKOUT,
+ PROOF_LOGGED,
+ TRAIN_TODAY,
+ AT_RISK,
+ RECOVER_SMART,
+}
+
+data class DailyProofSummary(
+ val status: DailyProofStatus,
+ val headline: String,
+ val detail: String,
+ val primaryActionLabel: String,
+ val primaryRoute: String,
+ val foxExpressionId: String,
+)
+
+internal fun parseHistoryInstant(value: String): Instant? {
+ val trimmed = value.trim()
+ if (trimmed.isBlank()) return null
+
+ return runCatching { Instant.parse(trimmed) }.getOrNull()
+ ?: runCatching {
+ LocalDate.parse(trimmed).atStartOfDay(ZoneOffset.UTC).toInstant()
+ }.getOrNull()
+ ?: runCatching {
+ LocalDateTime.parse(trimmed.replace(" ", "T"))
+ .atZone(ZoneId.systemDefault())
+ .toInstant()
+ }.getOrNull()
+}
+
+internal fun parseHistoryLocalDate(value: String): LocalDate? =
+ parseHistoryInstant(value)?.atZone(ZoneOffset.UTC)?.toLocalDate()
+
+fun dailyWorkoutStreakDays(
+ history: List,
+ nowEpochMs: Long = System.currentTimeMillis(),
+): Int {
+ if (history.isEmpty()) return 0
+ val dates = history.mapNotNull { parseHistoryLocalDate(it.date) }.toSet()
+ if (dates.isEmpty()) return 0
+
+ val today = Instant.ofEpochMilli(nowEpochMs).atZone(ZoneId.systemDefault()).toLocalDate()
+ val yesterday = today.minusDays(1)
+ if (today !in dates && yesterday !in dates) return 0
+
+ var streak = 0
+ var cursor = if (today in dates) today else yesterday
+ while (cursor in dates) {
+ streak++
+ cursor = cursor.minusDays(1)
+ }
+ return streak
+}
+
+fun buildDailyProofSummary(
+ history: List,
+ hasActivePlan: Boolean,
+ activeWorkoutDayName: String?,
+ readinessScore: Int?,
+ nowEpochMs: Long = System.currentTimeMillis(),
+): DailyProofSummary {
+ if (!activeWorkoutDayName.isNullOrBlank()) {
+ return DailyProofSummary(
+ status = DailyProofStatus.ACTIVE_WORKOUT,
+ headline = activeWorkoutDayName,
+ detail = "Current session is still in progress.",
+ primaryActionLabel = "Resume workout",
+ primaryRoute = "ActiveWorkout",
+ foxExpressionId = ForgeFoxExpression.Determined.id,
+ )
+ }
+
+ if (history.isEmpty() && !hasActivePlan) {
+ return DailyProofSummary(
+ status = DailyProofStatus.SETUP,
+ headline = "Set your proof loop",
+ detail = "Pick a plan so Home can drive the next session automatically.",
+ primaryActionLabel = "Choose a program",
+ primaryRoute = "ProgramPicker",
+ foxExpressionId = ForgeFoxExpression.Clipboard.id,
+ )
+ }
+
+ val today = Instant.ofEpochMilli(nowEpochMs).atZone(ZoneId.systemDefault()).toLocalDate()
+ val lastWorkoutDate = history.mapNotNull { parseHistoryLocalDate(it.date) }.maxOrNull()
+ val daysSinceWorkout = lastWorkoutDate?.let { ChronoUnit.DAYS.between(it, today).toInt() } ?: Int.MAX_VALUE
+
+ if (daysSinceWorkout <= 0) {
+ return DailyProofSummary(
+ status = DailyProofStatus.PROOF_LOGGED,
+ headline = "Proof saved",
+ detail = "Today's session already counts toward your ledger.",
+ primaryActionLabel = "Open Iron Ledger",
+ primaryRoute = "statusWindow",
+ foxExpressionId = ForgeFoxExpression.Proud.id,
+ )
+ }
+
+ if ((readinessScore ?: 0) >= 78) {
+ return DailyProofSummary(
+ status = DailyProofStatus.TRAIN_TODAY,
+ headline = "Fresh enough to press",
+ detail = "Recovery is high enough to push the next proof session.",
+ primaryActionLabel = "Train today",
+ primaryRoute = "Home",
+ foxExpressionId = ForgeFoxExpression.Flexing.id,
+ )
+ }
+
+ if (daysSinceWorkout >= 2) {
+ return DailyProofSummary(
+ status = DailyProofStatus.AT_RISK,
+ headline = "Your rhythm is slipping",
+ detail = "The next workout matters more than another scroll.",
+ primaryActionLabel = "Train today",
+ primaryRoute = "Home",
+ foxExpressionId = ForgeFoxExpression.CheckingWatch.id,
+ )
+ }
+
+ return DailyProofSummary(
+ status = DailyProofStatus.RECOVER_SMART,
+ headline = "Recover on purpose",
+ detail = "Use today's readiness before forcing extra fatigue.",
+ primaryActionLabel = "Open recovery",
+ primaryRoute = "RecoveryMap",
+ foxExpressionId = ForgeFoxExpression.RestBlanket.id,
+ )
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/gamification/IronLedgerEngine.kt b/app/src/main/java/com/ironlog/app/domain/gamification/IronLedgerEngine.kt
new file mode 100644
index 0000000..0e4e833
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/gamification/IronLedgerEngine.kt
@@ -0,0 +1,422 @@
+package com.ironlog.app.domain.gamification
+
+import androidx.compose.runtime.Immutable
+import com.ironlog.app.ui.model.HistoryEntry
+import com.ironlog.app.ui.model.HistoryExercise
+import com.ironlog.app.ui.model.HistoryExerciseSet
+import java.time.Instant
+import java.time.ZoneOffset
+import java.time.temporal.ChronoUnit
+import java.time.temporal.WeekFields
+import java.util.Locale
+import kotlin.math.ln
+import kotlin.math.max
+import kotlin.math.roundToInt
+
+enum class IronGrade(
+ val label: String,
+ val minVerifiedSessions: Int,
+ val minQualifyingWeeks: Int,
+ val minTenureDays: Int,
+) {
+ UNCALIBRATED("Uncalibrated", 0, 0, 0),
+ GRAPHITE("Graphite", 4, 2, 14),
+ IRON("Iron", 12, 3, 28),
+ STEEL("Steel", 36, 8, 90),
+ TITANIUM("Titanium", 80, 20, 180),
+ OBSIDIAN("Obsidian", 160, 40, 365),
+ IRIDIUM("Iridium", 300, 90, 730),
+ AETHER("Aether", 450, 140, 1095),
+ APEX("Apex", 650, 200, 1460),
+}
+
+@Immutable
+data class AthleteCalibration(
+ val trainingAgeMonths: Int = 0,
+ val historicalTrainingDaysPerWeek: Int = 3,
+ val importedHistory: Boolean = false,
+ val weeklyGoalDays: Int = 4,
+ val bodyweightKg: Double? = null,
+ val hasPastTraining: Boolean = false,
+ val hasGymAccess: Boolean = true,
+ val baselinePushups: Int = 0,
+ val baselinePullups: Int = 0,
+ val baselineBenchKg: Int = 0,
+ val baselineLatPulldownKg: Int = 0,
+ val baselineMileRunSeconds: Int = 0,
+)
+
+@Immutable
+data class IronLedgerStats(
+ val strength: Int = 1,
+ val power: Int = 1,
+ val hypertrophy: Int = 1,
+ val endurance: Int = 1,
+ val agility: Int = 1,
+ val discipline: Int = 1,
+ val recovery: Int = 1,
+)
+
+@Immutable
+data class IronGradeGate(
+ val grade: IronGrade,
+ val label: String,
+ val current: Int,
+ val required: Int,
+ val met: Boolean,
+)
+
+@Immutable
+data class IronLedgerEvent(
+ val sourceId: String,
+ val kind: String,
+ val title: String,
+ val detail: String,
+ val xp: Int,
+ val occurredAt: String,
+ val trust: Double,
+)
+
+@Immutable
+data class IronLedgerSnapshot(
+ val totalXp: Long,
+ val level: Int,
+ val xpInLevel: Long,
+ val xpForNextLevel: Long,
+ val grade: IronGrade,
+ val stats: IronLedgerStats,
+ val integrityScore: Double,
+ val verifiedSessions: Int,
+ val qualifyingWeeks: Int,
+ val tenureDays: Int,
+ val nextGrade: IronGrade?,
+ val nextGradeGates: List,
+ val events: List,
+)
+
+class IronLedgerEngine {
+ fun xpForLevel(level: Int): Long =
+ (125.0 * level.toDouble() * level.toDouble()).roundToInt().toLong().coerceAtLeast(125L)
+
+ fun levelFromTotalXp(totalXp: Long): Int {
+ var level = 1
+ var remaining = totalXp
+ while (level < 100 && remaining >= xpForLevel(level)) {
+ remaining -= xpForLevel(level)
+ level++
+ }
+ return level
+ }
+
+ fun xpInCurrentLevel(totalXp: Long): Long {
+ val level = levelFromTotalXp(totalXp)
+ val spent = (1 until level).sumOf { xpForLevel(it) }
+ return (totalXp - spent).coerceAtLeast(0L)
+ }
+
+ fun rebuild(
+ history: List,
+ weeklyGoal: Int,
+ calibration: AthleteCalibration,
+ ): IronLedgerSnapshot {
+ val sorted = history.sortedBy { it.date }
+ val qualified = sorted.filter(::isQualifyingWorkout)
+ val verified = qualified.filterNot { it.imported }
+ val firstDate = verified.firstOrNull()?.date?.let(::parseInstant)
+ val lastDate = verified.lastOrNull()?.date?.let(::parseInstant) ?: Instant.now()
+ val tenureDays = firstDate?.let { ChronoUnit.DAYS.between(it, lastDate).toInt().coerceAtLeast(0) } ?: 0
+ val qualifyingWeeks = verified.mapNotNull { weekKey(it.date) }.distinct().size
+ val integrity = integrityScore(verified, verified)
+ val events = buildEvents(sorted, qualified, integrity)
+ val totalXp = events.sumOf { it.xp.toLong() }.coerceAtLeast(0L)
+ val level = levelFromTotalXp(totalXp)
+ val stats = computeStats(sorted, qualifyingWeeks, calibration)
+ val grade = gradeFor(
+ verifiedSessions = verified.size,
+ qualifyingWeeks = qualifyingWeeks,
+ tenureDays = tenureDays,
+ integrity = integrity,
+ stats = stats,
+ calibration = calibration,
+ )
+ val nextGrade = IronGrade.entries.firstOrNull { it.ordinal > grade.ordinal }
+ val gates = nextGrade?.let { ng ->
+ buildList {
+ add(IronGradeGate(ng, "Verified sessions", verified.size, ng.minVerifiedSessions, verified.size >= ng.minVerifiedSessions))
+ add(IronGradeGate(ng, "Qualifying weeks", qualifyingWeeks, ng.minQualifyingWeeks, qualifyingWeeks >= ng.minQualifyingWeeks))
+ add(IronGradeGate(ng, "Training tenure", tenureDays, ng.minTenureDays, tenureDays >= ng.minTenureDays))
+ // Integrity gate only applies for OBSIDIAN and above
+ if (ng.ordinal >= IronGrade.OBSIDIAN.ordinal) {
+ val required = if (ng.ordinal >= IronGrade.APEX.ordinal) 95 else 88
+ val threshold = required / 100.0
+ add(IronGradeGate(ng, "Integrity", (integrity * 100).roundToInt(), required, integrity >= threshold))
+ }
+ }
+ }.orEmpty()
+
+ return IronLedgerSnapshot(
+ totalXp = totalXp,
+ level = level,
+ xpInLevel = xpInCurrentLevel(totalXp),
+ xpForNextLevel = xpForLevel(level),
+ grade = grade,
+ stats = stats,
+ integrityScore = integrity,
+ verifiedSessions = verified.size,
+ qualifyingWeeks = qualifyingWeeks,
+ tenureDays = tenureDays,
+ nextGrade = nextGrade,
+ nextGradeGates = gates,
+ events = events.sortedByDescending { it.occurredAt },
+ )
+ }
+
+ private fun buildEvents(
+ history: List,
+ qualified: List,
+ integrity: Double,
+ ): List {
+ val qualifiedIds = qualified.map { it.id }.toSet()
+ val dailyCounts = qualified.groupingBy { dayKey(it.date) ?: it.date }.eachCount()
+ val previousBestByExercise = mutableMapOf()
+ val events = mutableListOf()
+ history.sortedBy { it.date }.forEach { workout ->
+ if (workout.id !in qualifiedIds) return@forEach
+ val dayCount = dailyCounts[dayKey(workout.date) ?: workout.date] ?: 1
+ val dailyMultiplier = when {
+ dayCount <= 1 -> 1.0
+ dayCount == 2 -> 0.45
+ else -> 0.0
+ }
+ val importMultiplier = if (workout.imported) 0.55 else 1.0
+ val trust = (integrity * dailyMultiplier * importMultiplier).coerceIn(0.0, 1.0)
+ val hardSets = hardSets(workout)
+ val baseXp = ((40 + hardSets.coerceAtMost(18) * 2) * trust).roundToInt()
+ if (baseXp > 0) {
+ events += IronLedgerEvent(
+ sourceId = workout.id,
+ kind = "workout",
+ title = "Training proof logged",
+ detail = "${workout.name} - $hardSets hard sets",
+ xp = baseXp,
+ occurredAt = workout.date,
+ trust = trust,
+ )
+ }
+ workout.exercises.forEach { exercise ->
+ val best = exercise.sets
+ .filter(::isWorkingSet)
+ .mapNotNull { set -> estimatedPerformance(exercise, set) }
+ .maxOrNull()
+ ?: return@forEach
+ val key = exercise.exerciseId.ifBlank { exercise.name.lowercase(Locale.ROOT) }
+ val previous = previousBestByExercise[key]
+ if (previous != null && best > previous * 1.025 && trust >= 0.75) {
+ val eventSourceId = "${workout.id}:${exercise.id.ifBlank { key }}"
+ events += IronLedgerEvent(
+ sourceId = eventSourceId,
+ kind = "pr",
+ title = "Verified PR",
+ detail = "${exercise.name} improved ${previous.roundToInt()} -> ${best.roundToInt()}",
+ xp = 35,
+ occurredAt = workout.date,
+ trust = trust,
+ )
+ }
+ previousBestByExercise[key] = max(previous ?: 0.0, best)
+ }
+ }
+ return events
+ }
+
+ private fun gradeFor(
+ verifiedSessions: Int,
+ qualifyingWeeks: Int,
+ tenureDays: Int,
+ integrity: Double,
+ stats: IronLedgerStats,
+ calibration: AthleteCalibration,
+ ): IronGrade {
+ val balance = listOf(stats.strength, stats.hypertrophy, stats.discipline).average()
+ val verifiedGrade = IronGrade.entries.lastOrNull { grade ->
+ verifiedSessions >= grade.minVerifiedSessions &&
+ qualifyingWeeks >= grade.minQualifyingWeeks &&
+ tenureDays >= grade.minTenureDays &&
+ (grade.ordinal < IronGrade.OBSIDIAN.ordinal || integrity >= 0.88) &&
+ (grade.ordinal < IronGrade.IRIDIUM.ordinal || balance >= 300.0) &&
+ (grade.ordinal < IronGrade.APEX.ordinal || integrity >= 0.95)
+ } ?: IronGrade.UNCALIBRATED
+ val seededGrade = baselineGrade(calibration, stats)
+ return if (seededGrade.ordinal > verifiedGrade.ordinal) seededGrade else verifiedGrade
+ }
+
+ private fun computeStats(
+ history: List,
+ qualifyingWeeks: Int,
+ calibration: AthleteCalibration,
+ ): IronLedgerStats {
+ val sets = history.flatMap { workout -> workout.exercises.flatMap { ex -> ex.sets.map { ex to it } } }
+ val working = sets.filter { (_, set) -> isWorkingSet(set) }
+ val strengthRaw = working
+ .filter { (ex, set) -> !isCardio(ex) && set.weight > 0.0 && set.reps > 0.0 }
+ .maxOfOrNull { (_, set) -> epley(set.weight, set.reps) }
+ ?: 0.0
+ val enduranceRaw = history.sumOf { workout ->
+ workout.exercises.sumOf { ex ->
+ if (isCardio(ex)) ex.sets.sumOf { it.reps.coerceAtLeast(0.0) } / 60.0 else 0.0
+ }
+ } + history.sumOf { if (it.duration >= 45 * 60) 2.0 else 0.0 }
+ val hypertrophyRaw = working.count().toDouble()
+ val powerRaw = working.count { (ex, set) ->
+ !isCardio(ex) && set.weight > 0.0 && set.reps in 1.0..5.0
+ }.toDouble()
+ val agilityRaw = working.count { (ex, _) ->
+ val name = ex.name.lowercase(Locale.ROOT)
+ name.contains("jump") || name.contains("lunge") || name.contains("single") ||
+ name.contains("carry") || name.contains("crawl") || ex.category.orEmpty().contains("conditioning", ignoreCase = true)
+ }.toDouble()
+ val disciplineRaw = qualifyingWeeks * 4.0 + working.count { (_, set) -> set.rpe != null || set.rir != null }
+ val recoveryRaw = qualifyingWeeks * 3.0 + history.count { it.duration in 20 * 60..120 * 60 }
+
+ val verifiedStats = IronLedgerStats(
+ strength = toStat(strengthRaw, 120.0),
+ power = toStat(powerRaw, 20.0),
+ hypertrophy = toStat(hypertrophyRaw, 80.0),
+ endurance = toStat(enduranceRaw, 20.0),
+ agility = toStat(agilityRaw, 20.0),
+ discipline = toStat(disciplineRaw, 50.0),
+ recovery = toStat(recoveryRaw, 50.0),
+ )
+ val seededStats = baselineStats(calibration)
+ return IronLedgerStats(
+ strength = max(verifiedStats.strength, seededStats.strength),
+ power = max(verifiedStats.power, seededStats.power),
+ hypertrophy = max(verifiedStats.hypertrophy, seededStats.hypertrophy),
+ endurance = max(verifiedStats.endurance, seededStats.endurance),
+ agility = max(verifiedStats.agility, seededStats.agility),
+ discipline = max(verifiedStats.discipline, seededStats.discipline),
+ recovery = max(verifiedStats.recovery, seededStats.recovery),
+ )
+ }
+
+ private fun hasMeaningfulBaseline(calibration: AthleteCalibration): Boolean =
+ calibration.trainingAgeMonths > 0 ||
+ calibration.bodyweightKg != null ||
+ calibration.hasPastTraining ||
+ calibration.baselinePushups > 0 ||
+ calibration.baselinePullups > 0 ||
+ calibration.baselineBenchKg > 0 ||
+ calibration.baselineLatPulldownKg > 0 ||
+ calibration.baselineMileRunSeconds > 0
+
+ private fun estimatedLifetimeSessions(calibration: AthleteCalibration): Int =
+ (calibration.trainingAgeMonths * 4.345 * max(1, calibration.historicalTrainingDaysPerWeek)).roundToInt().coerceAtLeast(0)
+
+ private fun baselineStats(calibration: AthleteCalibration): IronLedgerStats {
+ if (!hasMeaningfulBaseline(calibration)) return IronLedgerStats()
+ val sessions = estimatedLifetimeSessions(calibration).toDouble()
+ val bodyweight = calibration.bodyweightKg ?: 0.0
+ val push = calibration.baselinePushups.toDouble()
+ val pull = calibration.baselinePullups.toDouble()
+ val bench = calibration.baselineBenchKg.toDouble()
+ val lat = calibration.baselineLatPulldownKg.toDouble()
+ val mile = calibration.baselineMileRunSeconds.takeIf { it > 0 }?.toDouble()
+ val paceFactor = mile?.let { (900.0 / it).coerceIn(0.0, 2.0) } ?: 0.0
+
+ val strengthRaw = bench * 2.4 + lat * 1.5 + pull * 6.0 + push * 1.2 + bodyweight * 0.45 + sessions * 0.30
+ val powerRaw = bench * 1.6 + pull * 3.5 + push * 0.8 + sessions * 0.12
+ val hypertrophyRaw = bench * 1.4 + lat * 1.1 + push * 1.6 + pull * 2.2 + sessions * 0.22
+ val enduranceRaw = push * 0.9 + sessions * 0.08 + paceFactor * 30.0 + calibration.weeklyGoalDays * 2.5
+ val agilityRaw = pull * 1.0 + paceFactor * 55.0 + sessions * 0.05
+ val disciplineRaw = sessions * 0.16 + calibration.weeklyGoalDays * 8.0 + if (calibration.hasPastTraining) 18.0 else 0.0
+ val recoveryRaw = sessions * 0.10 + calibration.weeklyGoalDays * 6.0 + if (calibration.hasGymAccess) 8.0 else 4.0
+
+ return IronLedgerStats(
+ strength = toStat(strengthRaw, 45.0),
+ power = toStat(powerRaw, 28.0),
+ hypertrophy = toStat(hypertrophyRaw, 55.0),
+ endurance = toStat(enduranceRaw, 18.0),
+ agility = toStat(agilityRaw, 16.0),
+ discipline = toStat(disciplineRaw, 22.0),
+ recovery = toStat(recoveryRaw, 24.0),
+ )
+ }
+
+ private fun baselineGrade(
+ calibration: AthleteCalibration,
+ stats: IronLedgerStats,
+ ): IronGrade {
+ if (!hasMeaningfulBaseline(calibration)) return IronGrade.UNCALIBRATED
+ val sessions = estimatedLifetimeSessions(calibration)
+ val months = calibration.trainingAgeMonths
+ val score = listOf(
+ stats.strength,
+ stats.power,
+ stats.hypertrophy,
+ stats.endurance,
+ stats.agility,
+ stats.discipline,
+ stats.recovery,
+ ).average()
+ return when {
+ score >= 150.0 && sessions >= 180 && months >= 16 -> IronGrade.TITANIUM
+ score >= 110.0 && sessions >= 90 && months >= 10 -> IronGrade.STEEL
+ score >= 80.0 && sessions >= 28 && months >= 6 -> IronGrade.IRON
+ score >= 45.0 && sessions >= 8 && months >= 2 -> IronGrade.GRAPHITE
+ else -> IronGrade.UNCALIBRATED
+ }
+ }
+
+ private fun integrityScore(
+ history: List,
+ qualified: List,
+ ): Double {
+ if (history.isEmpty()) return 1.0
+ val dailyMax = qualified.groupingBy { dayKey(it.date) ?: it.date }.eachCount().values.maxOrNull() ?: 0
+ val veryShort = history.count { it.duration in 1 until 10 * 60 }
+ var score = 1.0
+ if (dailyMax > 2) score -= (dailyMax - 2) * 0.12
+ score -= veryShort * 0.03
+ return score.coerceIn(0.35, 1.0)
+ }
+
+ private fun isQualifyingWorkout(workout: HistoryEntry): Boolean {
+ val hardSets = hardSets(workout)
+ val cardioMinutes = workout.exercises
+ .filter(::isCardio)
+ .sumOf { ex -> ex.sets.sumOf { it.reps.coerceAtLeast(0.0) } / 60.0 }
+ if (hardSets == 0 && cardioMinutes <= 0.0) return false
+ return hardSets >= 8 || (hardSets >= 3 && workout.duration >= 20 * 60) || cardioMinutes >= 10.0
+ }
+
+ private fun hardSets(workout: HistoryEntry): Int =
+ workout.exercises.sumOf { ex -> ex.sets.count(::isWorkingSet) }
+
+ private fun isWorkingSet(set: HistoryExerciseSet): Boolean =
+ set.type.lowercase(Locale.ROOT) != "warmup" && (set.weight > 0.0 || set.reps > 0.0)
+
+ private fun isCardio(exercise: HistoryExercise): Boolean {
+ val haystack = "${exercise.name} ${exercise.category.orEmpty()} ${exercise.primaryMuscle.orEmpty()}".lowercase(Locale.ROOT)
+ return listOf("cardio", "run", "treadmill", "bike", "cycle", "rower", "swim", "elliptical", "conditioning")
+ .any { it in haystack }
+ }
+
+ private fun estimatedPerformance(exercise: HistoryExercise, set: HistoryExerciseSet): Double =
+ if (isCardio(exercise) || set.weight <= 0.0) set.reps else epley(set.weight, set.reps)
+
+ private fun epley(weight: Double, reps: Double): Double = weight * (1.0 + reps / 30.0)
+
+ private fun toStat(value: Double, scale: Double): Int =
+ (1 + ln(1.0 + value / scale) * 180.0).roundToInt().coerceIn(1, 999)
+
+ private fun parseInstant(value: String) = parseHistoryInstant(value)
+
+ private fun dayKey(value: String): String? =
+ parseInstant(value)?.atZone(ZoneOffset.UTC)?.toLocalDate()?.toString()
+
+ private fun weekKey(value: String): String? {
+ val date = parseInstant(value)?.atZone(ZoneOffset.UTC)?.toLocalDate() ?: return null
+ val wf = WeekFields.ISO
+ return "${date.get(wf.weekBasedYear())}-W${date.get(wf.weekOfWeekBasedYear())}"
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/gamification/StatEngine.kt b/app/src/main/java/com/ironlog/app/domain/gamification/StatEngine.kt
new file mode 100644
index 0000000..1aa5823
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/gamification/StatEngine.kt
@@ -0,0 +1,81 @@
+// app/src/main/java/com/ironlog/app/domain/gamification/StatEngine.kt
+package com.ironlog.app.domain.gamification
+
+import com.ironlog.app.ui.model.HistoryEntry
+import kotlinx.serialization.Serializable
+import kotlin.math.ln
+import kotlin.math.roundToInt
+
+@Serializable
+data class RpgStats(
+ val str: Int = 1, // Strength - best estimated 1RM across all exercises
+ val vit: Int = 1, // Vitality - streak + total sessions
+ val end: Int = 1, // Endurance - average workout duration
+ val agi: Int = 1, // Agility - exercise variety per session
+ val wis: Int = 1, // Wisdom - RPE/effort tracking frequency (future; now = 1)
+ val luk: Int = 1, // Luck - rare events such as PRs, streaks, and high-effort proof
+)
+
+class StatEngine {
+
+ /** Epley formula: 1RM ~= weight * (1 + reps/30). */
+ private fun epley1rm(weight: Double, reps: Double): Double =
+ weight * (1.0 + reps / 30.0)
+
+ /**
+ * Map a raw metric to a 1-999 stat value using logarithmic scaling.
+ * [value] is the raw metric; [scale] controls how quickly stat grows.
+ */
+ private fun toStat(value: Double, scale: Double): Int =
+ (1 + (ln(1.0 + value / scale) * 200.0)).roundToInt().coerceIn(1, 999)
+
+ fun compute(
+ history: List,
+ streak: Int,
+ totalSessions: Int,
+ ): RpgStats {
+ if (history.isEmpty()) return RpgStats()
+
+ // STR - best estimated 1RM across all sets in all history.
+ val bestOrm: Double = history.flatMap { it.exercises }
+ .flatMap { it.sets }
+ .filter { it.type != "warmup" && it.reps > 0 && it.weight > 0 }
+ .maxOfOrNull { epley1rm(it.weight, it.reps) } ?: 0.0
+
+ // END - average workout duration in minutes.
+ val avgDurationMin = history.map { it.duration / 60.0 }.average()
+
+ // AGI - average distinct exercises per session.
+ val avgExercises = history.map { it.exercises.size.toDouble() }.average()
+
+ // VIT - blend of streak weeks and total sessions.
+ val vitRaw = streak * 5.0 + totalSessions.toDouble()
+
+ // WIS - fraction of sets that have RPE logged, scaled to encourage consistent tracking.
+ val totalSets = history.sumOf { it.exercises.sumOf { ex -> ex.sets.size } }.toDouble()
+ val rpeTrackedSets = history.sumOf { entry ->
+ entry.exercises.sumOf { ex -> ex.sets.count { it.rpe != null } }
+ }.toDouble()
+ val wisRaw = if (totalSets > 0) (rpeTrackedSets / totalSets) * 100.0 else 0.0
+ val wis = toStat(wisRaw, scale = 20.0)
+
+ // LUK - high-effort proof events, approximated as high-RPE sets for now.
+ val luk = toStat(
+ value = history.sumOf { entry ->
+ entry.exercises.sumOf { ex ->
+ ex.sets.count { it.rpe != null && (it.rpe ?: 0.0) >= 9.0 }.toDouble()
+ }
+ },
+ scale = 20.0,
+ )
+
+ return RpgStats(
+ str = toStat(bestOrm, scale = 100.0),
+ vit = toStat(vitRaw, scale = 50.0),
+ end = toStat(avgDurationMin, scale = 30.0),
+ agi = toStat(avgExercises, scale = 5.0),
+ wis = wis,
+ luk = luk,
+ )
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/gamification/StreakEngine.kt b/app/src/main/java/com/ironlog/app/domain/gamification/StreakEngine.kt
new file mode 100644
index 0000000..2c3f023
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/gamification/StreakEngine.kt
@@ -0,0 +1,80 @@
+// app/src/main/java/com/ironlog/app/domain/gamification/StreakEngine.kt
+package com.ironlog.app.domain.gamification
+
+import com.ironlog.app.ui.model.HistoryEntry
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.format.DateTimeFormatter
+import java.time.temporal.TemporalAdjusters
+import java.time.temporal.WeekFields
+
+class StreakEngine {
+
+ private val isoWeek = WeekFields.ISO
+
+ /**
+ * ISO week key, e.g. "2026-W21".
+ */
+ private fun LocalDate.isoWeekKey(): String {
+ val week = get(isoWeek.weekOfWeekBasedYear())
+ val year = get(isoWeek.weekBasedYear())
+ return "$year-W${week.toString().padStart(2, '0')}"
+ }
+
+ /**
+ * Computes the current streak in qualifying weeks.
+ *
+ * A week qualifies if:
+ * - sessions in that week >= [weeklyGoal], OR
+ * - sessions == weeklyGoal - 1 AND [recoveryCircuitCompletions][weekKey] >= 1
+ *
+ * The streak counts backward from the most recent qualifying week.
+ * A missing week (no workouts at all, not even goal-1+recovery circuit) breaks the streak.
+ *
+ * @param history All workout history entries.
+ * @param weeklyGoal Sessions required per week (from IronLogSettings.weeklyGoalDays).
+ * @param recoveryCircuitCompletions Map of ISO-week-key -> number of recovery circuits completed.
+ */
+ fun computeStreakWeeks(
+ history: List,
+ weeklyGoal: Int,
+ recoveryCircuitCompletions: Map,
+ asOfDate: LocalDate = LocalDate.now(),
+ ): Int {
+ if (history.isEmpty()) return 0
+
+ // Group workouts by ISO week key
+ val fmt = DateTimeFormatter.ISO_LOCAL_DATE
+ val sessionsByWeek: Map = history
+ .mapNotNull { entry ->
+ runCatching { LocalDate.parse(entry.date.take(10), fmt) }.getOrNull()
+ ?.isoWeekKey()
+ }
+ .groupingBy { it }
+ .eachCount()
+
+ if (sessionsByWeek.isEmpty()) return 0
+
+ // Start from the most recent week that has any sessions
+ val goal = weeklyGoal.coerceAtLeast(1)
+ val currentMonday = asOfDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
+ fun qualifies(monday: LocalDate): Boolean {
+ val weekKey = monday.isoWeekKey()
+ val sessions = sessionsByWeek[weekKey] ?: 0
+ val recoveryCircuits = recoveryCircuitCompletions[weekKey] ?: 0
+ return sessions >= goal || (sessions == goal - 1 && recoveryCircuits >= 1)
+ }
+
+ var checkMonday = if (qualifies(currentMonday)) currentMonday else currentMonday.minusWeeks(1)
+ if (!qualifies(checkMonday)) return 0
+
+ // Walk backward one ISO week at a time — gaps in sessionsByWeek break the streak
+ var streak = 0
+ while (qualifies(checkMonday)) {
+ streak++
+ checkMonday = checkMonday.minusWeeks(1)
+ }
+
+ return streak
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/gamification/XpEngine.kt b/app/src/main/java/com/ironlog/app/domain/gamification/XpEngine.kt
new file mode 100644
index 0000000..7c3f471
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/gamification/XpEngine.kt
@@ -0,0 +1,51 @@
+package com.ironlog.app.domain.gamification
+
+import kotlin.math.roundToInt
+
+enum class XpAction {
+ RECOVERY_CIRCUIT,
+}
+
+class XpEngine {
+
+ /**
+ * XP required to reach [level] (1-indexed).
+ * Curve: 125.0 * level^2, coerced to at least 125L.
+ */
+ fun xpForLevel(level: Int): Long =
+ (125.0 * level.toDouble() * level.toDouble()).roundToInt().toLong().coerceAtLeast(125L)
+
+ /**
+ * Legacy grade bridge retained for old cached profiles.
+ * Canonical Iron Ledger grades are rebuilt by [IronLedgerEngine].
+ */
+ fun rankForLevel(level: Int): String = when {
+ level >= 91 -> "Apex"
+ level >= 71 -> "S"
+ level >= 51 -> "A"
+ level >= 36 -> "B"
+ level >= 21 -> "C"
+ level >= 11 -> "D"
+ else -> "E"
+ }
+
+ fun xpForAction(action: XpAction): Int = when (action) {
+ XpAction.RECOVERY_CIRCUIT -> 25
+ }
+
+ fun levelFromTotalXp(totalXp: Long): Int {
+ var level = 1
+ var remaining = totalXp
+ while (level < 100 && remaining >= xpForLevel(level)) {
+ remaining -= xpForLevel(level)
+ level++
+ }
+ return level
+ }
+
+ fun xpInCurrentLevel(totalXp: Long): Long {
+ val level = levelFromTotalXp(totalXp)
+ val spent = (1 until level).sumOf { xpForLevel(it) }
+ return (totalXp - spent).coerceAtLeast(0L)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiEngine.kt
new file mode 100644
index 0000000..5fe15db
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiEngine.kt
@@ -0,0 +1,421 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.ui.model.HistoryEntry
+import io.ktor.client.HttpClient
+import io.ktor.client.call.body
+import io.ktor.client.engine.android.Android
+import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
+import io.ktor.client.request.get
+import io.ktor.client.request.header
+import io.ktor.client.request.post
+import io.ktor.client.request.setBody
+import io.ktor.http.ContentType
+import io.ktor.http.contentType
+import io.ktor.serialization.kotlinx.json.json
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.JsonArray
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonArray
+import kotlinx.serialization.json.jsonObject
+import kotlinx.serialization.json.jsonPrimitive
+import timber.log.Timber
+
+/**
+ * HTTP engine for BYOK Cloud AI.
+ * Supports OpenAI-compatible providers (apiFormat = "openai") and Anthropic Claude (apiFormat = "anthropic").
+ * All suspend functions run natively via Ktor coroutines and never throw — they return safe fallback strings.
+ */
+object CloudAiEngine {
+
+ private val json = Json { ignoreUnknownKeys = true; explicitNulls = false }
+
+ private val client = HttpClient(Android) {
+ install(ContentNegotiation) { json(json) }
+ expectSuccess = true // throw ResponseException on non-2xx so callers get a status-code error
+ engine {
+ connectTimeout = 30_000
+ socketTimeout = 60_000
+ }
+ }
+
+ // ── Serializable request shapes ───────────────────────────────────────────
+
+ @Serializable
+ private data class ChatMessage(val role: String, val content: String)
+
+ @Serializable
+ private data class OpenAiRequest(
+ val model: String,
+ val messages: List,
+ val max_tokens: Int = 1024,
+ val temperature: Double = 0.7,
+ val response_format: ResponseFormat? = null,
+ )
+
+ @Serializable
+ private data class ResponseFormat(val type: String)
+
+ @Serializable
+ private data class AnthropicRequest(
+ val model: String,
+ val messages: List,
+ val max_tokens: Int = 1024,
+ val temperature: Double = 0.7,
+ val system: String? = null,
+ )
+
+ // ── Model listing ─────────────────────────────────────────────────────────
+
+ /**
+ * Lists available models from the provider.
+ * Both OpenAI and Anthropic return a "data" array with "id" fields at their /models endpoints.
+ * Returns Result.failure on network error or non-2xx response.
+ */
+ suspend fun fetchModels(
+ baseUrl: String,
+ apiKey: String,
+ apiFormat: String,
+ ): Result> = runCatching {
+ val url = if (apiFormat == "anthropic")
+ "https://api.anthropic.com/v1/models"
+ else
+ "${baseUrl.trimEnd('/')}/models"
+
+ val body: JsonObject = client.get(url) {
+ if (apiFormat == "anthropic") {
+ header("x-api-key", apiKey)
+ header("anthropic-version", "2023-06-01")
+ } else {
+ header("Authorization", "Bearer $apiKey")
+ }
+ }.body()
+
+ val arr: JsonArray = body["data"]?.jsonArray ?: JsonArray(emptyList())
+ // removePrefix("models/") strips the Gemini-style "models/..." prefix; no-op for OpenAI/Anthropic IDs
+ arr.mapNotNull { it.jsonObject["id"]?.jsonPrimitive?.content?.removePrefix("models/") }
+ }.onFailure { Timber.w(it, "fetchModels failed") }
+
+ // ── Connection verification ───────────────────────────────────────────────
+
+ /**
+ * Fires a minimal request (max_tokens=1) to verify the key and endpoint work.
+ * Returns Result.success(Unit) on any 2xx, Result.failure otherwise.
+ */
+ suspend fun verify(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ ): Result = runCatching {
+ if (apiFormat == "anthropic") {
+ client.post("https://api.anthropic.com/v1/messages") {
+ header("x-api-key", apiKey)
+ header("anthropic-version", "2023-06-01")
+ contentType(ContentType.Application.Json)
+ setBody(AnthropicRequest(
+ model = modelName,
+ messages = listOf(ChatMessage("user", "Reply OK.")),
+ max_tokens = 8,
+ temperature = 0.0,
+ ))
+ }
+ } else {
+ client.post("${baseUrl.trimEnd('/')}/chat/completions") {
+ header("Authorization", "Bearer $apiKey")
+ contentType(ContentType.Application.Json)
+ setBody(OpenAiRequest(
+ model = modelName,
+ messages = listOf(ChatMessage("user", "Reply OK.")),
+ max_tokens = 8,
+ temperature = 0.0,
+ ))
+ }
+ }
+ Unit
+ }.onFailure { Timber.w(it, "verify failed") }
+
+ // ── Four insight query functions ──────────────────────────────────────────
+
+ suspend fun askRecovery(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ readiness: Map,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return "Configure your Cloud AI key in Settings."
+ val readinessText = readiness.entries
+ .sortedBy { it.key }
+ .joinToString(", ") { (k, v) -> "$k ${(v * 100).toInt()}%" }
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Based on these muscle group recovery scores, give ONE actionable recommendation for today in 2 sentences max.
+Recovery: $readinessText
+Rules: under 60 words, plain text only, no markdown, no bullet points."""
+ return runCatching { chat(baseUrl, apiKey, modelName, apiFormat, prompt) }
+ .getOrElse { Timber.w(it, "askRecovery failed"); "" }
+ }
+
+ suspend fun askSplitSuggestion(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ history: List,
+ weeklyGoalDays: Int,
+ goalMode: String,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return "Configure your Cloud AI key in Settings."
+ val goal = when (goalMode) {
+ "strength" -> "strength and powerlifting"
+ "general_fitness" -> "general fitness and conditioning"
+ else -> "muscle hypertrophy"
+ }
+ val recentMuscles = history.take(20)
+ .flatMap { it.exercises }
+ .mapNotNull { it.primaryMuscle?.takeIf { m -> m.isNotBlank() } ?: it.name.takeIf { n -> n.isNotBlank() } }
+ .distinct().take(12).joinToString(", ").ifBlank { "various muscle groups" }
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Suggest a $weeklyGoalDays-day weekly split optimised for $goal in 3–4 sentences.
+The athlete has recently trained: $recentMuscles.
+Be specific (Push/Pull/Legs, Upper/Lower, etc.). Under 80 words. Plain text only, no markdown."""
+ return runCatching { chat(baseUrl, apiKey, modelName, apiFormat, prompt) }
+ .getOrElse { Timber.w(it, "askSplitSuggestion failed"); "" }
+ }
+
+ suspend fun askDayEvaluation(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ dayName: String,
+ exerciseNames: List,
+ goalMode: String,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return "Configure your Cloud AI key in Settings."
+ val goal = when (goalMode) {
+ "strength" -> "strength"
+ "general_fitness" -> "general fitness"
+ else -> "hypertrophy"
+ }
+ val exList = exerciseNames.take(8).joinToString(", ").ifBlank { "no exercises listed" }
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Evaluate this "$dayName" session for $goal: $exList.
+Note any imbalances or missing movement patterns in 2–3 sentences. Under 70 words. Plain text only."""
+ return runCatching { chat(baseUrl, apiKey, modelName, apiFormat, prompt) }
+ .getOrElse { Timber.w(it, "askDayEvaluation failed"); "" }
+ }
+
+ suspend fun askProgressionExplanation(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ exerciseName: String,
+ recentWeightKg: Double,
+ recentReps: Int,
+ trend: String,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return "Configure your Cloud AI key in Settings."
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+$exerciseName: working weight ${recentWeightKg}kg × $recentReps reps, progress trend is $trend.
+In 1–2 sentences explain the recommended next progression step. Under 50 words. Plain text only."""
+ return runCatching { chat(baseUrl, apiKey, modelName, apiFormat, prompt) }
+ .getOrElse { Timber.w(it, "askProgressionExplanation failed"); "" }
+ }
+
+ suspend fun generatePlanJson(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ daysPerWeek: Int,
+ goalMode: String,
+ equipment: List,
+ sessionDurationMin: Int,
+ cardioEverySession: Boolean,
+ exerciseCatalogMarkdown: String,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return ""
+ val equipmentText = equipment.joinToString(", ").ifBlank { "Barbell, Dumbbell, Bodyweight" }
+ val cardioNote = if (cardioEverySession) "Include a short low-intensity cardio exercise only if the user explicitly requested cardio; do not mark it as a warmup." else ""
+
+ val systemPrompt = "You are a JSON API. Output ONLY a single raw JSON object. " +
+ "Never write any text, explanation, markdown, or code fences before or after the JSON."
+
+ val userPrompt = """Create a $daysPerWeek-day weekly strength training plan.
+Goal: $goalMode
+Equipment: $equipmentText
+Session length: ~$sessionDurationMin minutes
+$cardioNote
+
+Output a single JSON object matching this schema exactly — no deviations, no extra keys at the root:
+{
+ "type": "ironlog_plan",
+ "version": 1,
+ "plan": {
+ "name": "",
+ "days": [
+ {
+ "name": "",
+ "color": "",
+ "exercises": [
+ {
+ "exerciseName": "",
+ "primaryMuscle": "",
+ "secondaryMuscles": [""],
+ "equipment": "",
+ "category": "",
+ "trackingType": "",
+ "movementPattern": "",
+ "difficulty": "",
+ "isBodyweight": ,
+ "sets": ,
+ "reps": "",
+ "restSeconds": ,
+ "isWarmup": false,
+ "supersetGroup": null,
+ "notes": ""
+ }
+ ]
+ }
+ ]
+ }
+}
+
+Strict rules:
+1. Root must have "type": "ironlog_plan" and "version": 1.
+2. "exerciseName" key only — never "name" for exercises.
+3. 4-12 exercises per day depending on session length and goal. Do not add warmup exercises or warmup sets. Every exercise must use "isWarmup": false.
+4. sets = integer, reps = string ("8-12" or "12"), restSeconds = integer (60-180).
+5. Day colors: Push=#FF4500, Pull=#0080FF, Legs=#00C170, Upper=#A020F0, Full Body=#FF8C00, other=#888888.
+6. Use common exercise names: "Barbell Bench Press", "Pull-Up", "Barbell Squat", "Romanian Deadlift", etc.
+7. If you invent an exercise or use a name that may not exist in Ironlog, include complete metadata: primaryMuscle, secondaryMuscles, equipment, category, trackingType, movementPattern, difficulty, and isBodyweight. This lets Ironlog add it to the local exercise library automatically.
+8. Output ONLY the JSON object. Nothing before it. Nothing after it.
+9. Write all $daysPerWeek days completely — do not truncate or summarise."""
+
+ val promptWithCatalog = """
+$userPrompt
+
+Exercise catalog (compact markdown, source of truth for naming + metadata):
+$exerciseCatalogMarkdown
+""".trimIndent()
+
+ return runCatching {
+ chatWithSystem(baseUrl, apiKey, modelName, apiFormat, systemPrompt, promptWithCatalog, maxTokens = 8192, temperature = 0.1, jsonMode = true)
+ }.getOrElse { Timber.e(it, "generatePlanJson failed"); "" }
+ }
+
+ suspend fun askStatsSummary(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ totalSessions: Int,
+ streak: Int,
+ totalSets: Int,
+ avgDurationMin: Int,
+ topExercise: String,
+ weightUnit: String,
+ ): String {
+ if (apiKey.isBlank() || baseUrl.isBlank()) return ""
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Summarise this athlete's training stats in 1-2 upbeat sentences. Mention highlights and one actionable tip.
+Stats: $totalSessions sessions total, $streak-day streak, $totalSets total sets, avg session ${avgDurationMin}min, top exercise: $topExercise, weight unit: $weightUnit.
+Under 60 words. Plain text only. No markdown."""
+ return runCatching { chat(baseUrl, apiKey, modelName, apiFormat, prompt) }
+ .getOrElse { Timber.w(it, "askStatsSummary failed"); "" }
+ }
+
+ // ── Private HTTP helpers ──────────────────────────────────────────────────
+
+ /** Dispatches to openai or anthropic format. Throws on any error — callers wrap in runCatching. */
+ private suspend fun chat(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ prompt: String,
+ maxTokens: Int = 1024,
+ temperature: Double = 0.7,
+ ): String = chatWithSystem(baseUrl, apiKey, modelName, apiFormat, null, prompt, maxTokens, temperature)
+
+ /**
+ * Like [chat] but accepts an optional system prompt and forwards it via the appropriate
+ * API mechanism (system field for Anthropic, system role message for OpenAI).
+ * @param jsonMode Pass `true` to enable `response_format: json_object` on OpenAI-compatible
+ * endpoints. Must be set explicitly — there is no auto-detection based on systemPrompt.
+ * Only [generatePlanJson] should pass `true` here.
+ */
+ private suspend fun chatWithSystem(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ apiFormat: String,
+ systemPrompt: String?,
+ userPrompt: String,
+ maxTokens: Int = 1024,
+ temperature: Double = 0.7,
+ jsonMode: Boolean = false,
+ ): String = if (apiFormat == "anthropic")
+ chatAnthropic(apiKey, modelName, systemPrompt, userPrompt, maxTokens, temperature)
+ else
+ chatOpenAi(baseUrl, apiKey, modelName, systemPrompt, userPrompt, maxTokens, temperature, jsonMode)
+
+ private suspend fun chatOpenAi(
+ baseUrl: String,
+ apiKey: String,
+ modelName: String,
+ systemPrompt: String?,
+ userPrompt: String,
+ maxTokens: Int,
+ temperature: Double,
+ jsonMode: Boolean,
+ ): String {
+ val messages = buildList {
+ if (!systemPrompt.isNullOrBlank()) add(ChatMessage("system", systemPrompt))
+ add(ChatMessage("user", userPrompt))
+ }
+ val response: JsonObject = client.post("${baseUrl.trimEnd('/')}/chat/completions") {
+ header("Authorization", "Bearer $apiKey")
+ contentType(ContentType.Application.Json)
+ setBody(OpenAiRequest(
+ model = modelName,
+ messages = messages,
+ max_tokens = maxTokens,
+ temperature = temperature,
+ response_format = if (jsonMode) ResponseFormat("json_object") else null,
+ ))
+ }.body()
+ return response["choices"]?.jsonArray
+ ?.firstOrNull()?.jsonObject?.get("message")?.jsonObject?.get("content")?.jsonPrimitive?.content
+ ?.trim()
+ ?: error("Empty OpenAI response")
+ }
+
+ private suspend fun chatAnthropic(
+ apiKey: String,
+ modelName: String,
+ systemPrompt: String?,
+ userPrompt: String,
+ maxTokens: Int,
+ temperature: Double,
+ ): String {
+ val response: JsonObject = client.post("https://api.anthropic.com/v1/messages") {
+ header("x-api-key", apiKey)
+ header("anthropic-version", "2023-06-01")
+ contentType(ContentType.Application.Json)
+ setBody(AnthropicRequest(
+ model = modelName,
+ messages = listOf(ChatMessage("user", userPrompt)),
+ max_tokens = maxTokens,
+ temperature = temperature,
+ system = systemPrompt?.takeIf { it.isNotBlank() },
+ ))
+ }.body()
+ return response["content"]?.jsonArray
+ ?.firstOrNull()?.jsonObject?.get("text")?.jsonPrimitive?.content
+ ?.trim()
+ ?: error("Empty Anthropic response")
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiKeyStore.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiKeyStore.kt
new file mode 100644
index 0000000..d0ca1fd
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/CloudAiKeyStore.kt
@@ -0,0 +1,52 @@
+package com.ironlog.app.domain.intelligence
+
+import android.content.Context
+import androidx.security.crypto.EncryptedSharedPreferences
+import androidx.security.crypto.MasterKey
+
+/**
+ * Per-provider encrypted API key storage.
+ * Each provider (openai, claude, gemini, …) gets its own slot.
+ * Keys are NEVER stored in IronLogSettings or ObjectBox.
+ * Never log or print values returned by [load].
+ */
+object CloudAiKeyStore {
+
+ private const val PREFS_FILE = "cloud_ai_key_store"
+ // Legacy single-key name kept for migration reads.
+ private const val KEY_LEGACY = "api_key"
+
+ private fun prefs(context: Context) = EncryptedSharedPreferences.create(
+ context,
+ PREFS_FILE,
+ MasterKey.Builder(context.applicationContext)
+ .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
+ .build(),
+ EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
+ EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM,
+ )
+
+ private fun keyFor(provider: String) = "api_key_${provider.ifBlank { "custom" }}"
+
+ /** Stores the API key for [provider] encrypted on-device. */
+ fun save(context: Context, provider: String, key: String) {
+ runCatching { prefs(context).edit().putString(keyFor(provider), key).apply() }
+ }
+
+ /**
+ * Returns the stored API key for [provider], or "" if not set.
+ * Falls back to the legacy single-key slot so existing users keep their key after upgrade.
+ */
+ fun load(context: Context, provider: String): String {
+ val p = runCatching { prefs(context) }.getOrNull() ?: return ""
+ val providerKey = runCatching { p.getString(keyFor(provider), "") ?: "" }.getOrDefault("")
+ if (providerKey.isNotBlank()) return providerKey
+ // Migration: return legacy key (set when there was only one slot)
+ return runCatching { p.getString(KEY_LEGACY, "") ?: "" }.getOrDefault("")
+ }
+
+ /** Deletes the stored API key for [provider]. */
+ fun clear(context: Context, provider: String) {
+ runCatching { prefs(context).edit().remove(keyFor(provider)).apply() }
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/GeminiNanoEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/GeminiNanoEngine.kt
new file mode 100644
index 0000000..4d033ca
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/GeminiNanoEngine.kt
@@ -0,0 +1,190 @@
+package com.ironlog.app.domain.intelligence
+
+import android.content.Context
+import com.google.ai.edge.aicore.DownloadConfig
+import com.google.ai.edge.aicore.GenerativeAIException
+import com.google.ai.edge.aicore.GenerativeModel
+import com.google.ai.edge.aicore.generationConfig
+import com.ironlog.app.ui.model.HistoryEntry
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+// ── Availability enum exposed to UI ──────────────────────────────────────────
+
+enum class NanoAvailability {
+ /** Device supports Gemini Nano and the model is ready. */
+ SUPPORTED,
+ /** Model must be downloaded first (may take several minutes on Wi-Fi). */
+ NEEDS_DOWNLOAD,
+ /**
+ * AICore is present but the Gemini Nano LLM feature (ID ≥ 10000) has not been
+ * deployed to this device yet. This is resolved via a Google Play system update,
+ * not by the app itself.
+ */
+ NEEDS_SYSTEM_UPDATE,
+ /** This device/OS version does not support on-device Gemini Nano. */
+ UNSUPPORTED,
+}
+
+// ── Engine singleton ──────────────────────────────────────────────────────────
+
+object GeminiNanoEngine {
+
+ // Lazy-init so we don't pay model-init cost unless the user enables APEX ENGINE.
+ @Volatile private var _model: GenerativeModel? = null
+
+ // Cached availability result — avoids repeated IPC probes from Settings + HomeScreen.
+ @Volatile private var _cachedAvailability: NanoAvailability? = null
+
+ /** Last exception detail from checkAvailability — exposed for diagnostic display in UI. */
+ @Volatile var lastAvailabilityError: String = ""
+ private set
+
+ private fun model(context: Context): GenerativeModel =
+ _model ?: synchronized(this) {
+ // Double-checked locking — avoids race where two coroutines both see null.
+ _model ?: run {
+ val config = generationConfig {
+ this.context = context.applicationContext
+ temperature = 0.7f
+ topK = 40
+ maxOutputTokens = 512
+ }
+ GenerativeModel(generationConfig = config, downloadConfig = DownloadConfig())
+ .also { _model = it }
+ }
+ }
+
+ // ── Availability ──────────────────────────────────────────────────────────
+
+ /**
+ * AICore ErrorCode constants (from GenerativeAIException.ErrorCode, which is an IntDef annotation):
+ * NOT_AVAILABLE = 8 → model not yet downloaded, device IS supported
+ * BINDING_FAILURE = 601 → AICore service not present on this device
+ * SERVICE_DISCONNECTED = 602
+ * BINDING_DIED = 603
+ * NEEDS_SYSTEM_UPDATE = 604 → OS too old / AICore not installed
+ * NULL_BINDING = 605 → AICore service returned null
+ *
+ * Only cache SUPPORTED — negative results are not cached so the user can retry
+ * (e.g. after enabling AICore in device settings or after a system update).
+ */
+ suspend fun checkAvailability(context: Context): NanoAvailability {
+ _cachedAvailability?.let { return it }
+ return withContext(Dispatchers.IO) {
+ try {
+ model(context).prepareInferenceEngine()
+ lastAvailabilityError = ""
+ NanoAvailability.SUPPORTED.also { _cachedAvailability = it }
+ } catch (e: GenerativeAIException) {
+ lastAvailabilityError = "${e::class.simpleName}(code=${e.errorCode}): ${e.message}"
+ val msg = e.message.orEmpty()
+ when {
+ // AICore service can't be bound → device doesn't ship AICore at all
+ e.errorCode in listOf(601, 602, 603, 604, 605) -> NanoAvailability.UNSUPPORTED
+ // "Required LLM feature not found" → AICore present but Google hasn't
+ // pushed the Gemini Nano feature package to this device yet.
+ // User needs a Google Play system update, not an in-app download.
+ msg.contains("LLM feature not found", ignoreCase = true) ||
+ msg.contains("NOT_AVAILABLE", ignoreCase = true) -> NanoAvailability.NEEDS_SYSTEM_UPDATE
+ // Feature registered but not yet downloaded
+ msg.contains("downloading", ignoreCase = true) -> NanoAvailability.NEEDS_DOWNLOAD
+ else -> NanoAvailability.NEEDS_SYSTEM_UPDATE
+ }
+ } catch (e: Exception) {
+ lastAvailabilityError = "${e::class.simpleName}: ${e.message}"
+ NanoAvailability.NEEDS_SYSTEM_UPDATE
+ }
+ }
+ }
+
+ suspend fun downloadModel(context: Context): Result = withContext(Dispatchers.IO) {
+ runCatching {
+ model(context).prepareInferenceEngine()
+ _cachedAvailability = NanoAvailability.SUPPORTED
+ }
+ }
+
+ // ── Query functions ───────────────────────────────────────────────────────
+
+ suspend fun askRecovery(
+ context: Context,
+ readiness: Map,
+ ): String = withContext(Dispatchers.IO) {
+ val readinessText = readiness.entries
+ .sortedBy { it.key }
+ .joinToString(", ") { (k, v) -> "$k ${(v * 100).toInt()}%" }
+
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Based on these muscle group recovery scores, give ONE actionable recommendation for today in 2 sentences max.
+Recovery: $readinessText
+Rules: under 60 words, plain text only, no markdown, no bullet points."""
+
+ runCatching { model(context).generateContent(prompt).text?.trim() }
+ .getOrNull() ?: "Train the most recovered groups today and keep volume moderate."
+ }
+
+ suspend fun askSplitSuggestion(
+ context: Context,
+ history: List,
+ weeklyGoalDays: Int,
+ goalMode: String,
+ ): String = withContext(Dispatchers.IO) {
+ val goal = when (goalMode) {
+ "strength" -> "strength and powerlifting"
+ "general_fitness" -> "general fitness and conditioning"
+ else -> "muscle hypertrophy"
+ }
+ val recentMuscles = history.take(20)
+ .flatMap { it.exercises }
+ .mapNotNull { it.primaryMuscle?.takeIf { m -> m.isNotBlank() } ?: it.name.takeIf { n -> n.isNotBlank() } }
+ .distinct()
+ .take(12)
+ .joinToString(", ")
+ .ifBlank { "various muscle groups" }
+
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Suggest a $weeklyGoalDays-day weekly split optimised for $goal in 3–4 sentences.
+The athlete has recently trained: $recentMuscles.
+Be specific (Push/Pull/Legs, Upper/Lower, etc.). Under 80 words. Plain text only, no markdown."""
+
+ runCatching { model(context).generateContent(prompt).text?.trim() }
+ .getOrNull() ?: "A Push/Pull/Legs split repeated across $weeklyGoalDays days suits your goal well."
+ }
+
+ suspend fun askDayEvaluation(
+ context: Context,
+ dayName: String,
+ exerciseNames: List,
+ goalMode: String,
+ ): String = withContext(Dispatchers.IO) {
+ val goal = when (goalMode) {
+ "strength" -> "strength"
+ "general_fitness" -> "general fitness"
+ else -> "hypertrophy"
+ }
+ val exList = exerciseNames.take(8).joinToString(", ").ifBlank { "no exercises listed" }
+
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+Evaluate this "$dayName" session for $goal: $exList.
+Note any imbalances or missing movement patterns in 2–3 sentences. Under 70 words. Plain text only."""
+
+ runCatching { model(context).generateContent(prompt).text?.trim() }
+ .getOrNull() ?: "The selection looks balanced. Ensure compound movements come first for best results."
+ }
+
+ suspend fun askProgressionExplanation(
+ context: Context,
+ exerciseName: String,
+ recentWeightKg: Double,
+ recentReps: Int,
+ trend: String,
+ ): String = withContext(Dispatchers.IO) {
+ val prompt = """You are a concise personal trainer AI inside the IronLog workout app.
+$exerciseName: working weight ${recentWeightKg}kg × $recentReps reps, progress trend is $trend.
+In 1–2 sentences explain the recommended next progression step. Under 50 words. Plain text only."""
+
+ runCatching { model(context).generateContent(prompt).text?.trim() }
+ .getOrNull() ?: "Aim to add a small amount of weight or an extra rep next session."
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/MuscleContributionEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/MuscleContributionEngine.kt
new file mode 100644
index 0000000..3befdf5
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/MuscleContributionEngine.kt
@@ -0,0 +1,398 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.ui.model.HistoryEntry
+import com.ironlog.app.ui.model.HistoryExercise
+
+// ── Fine-grained muscle list (26 muscles) ────────────────────────────────────
+
+val FINE_MUSCLES = listOf(
+ "upperChest", "midChest", "lowerChest",
+ "lats", "upperBack", "traps", "spinalErectors",
+ "frontDelts", "sideDelts", "rearDelts",
+ "bicepsLong", "bicepsShort", "brachialis",
+ "tricepsLong", "tricepsLateral", "tricepsMedial", "forearms",
+ "upperAbs", "lowerAbs", "obliques",
+ "quads", "hamstrings", "glutes", "calves", "adductors", "abductors",
+)
+
+/** Human-readable display name for each fine muscle key. */
+val FINE_MUSCLE_DISPLAY = mapOf(
+ "upperChest" to "Upper Chest",
+ "midChest" to "Mid Chest",
+ "lowerChest" to "Lower Chest",
+ "lats" to "Lats",
+ "upperBack" to "Upper Back",
+ "traps" to "Traps",
+ "spinalErectors" to "Spinal Erectors",
+ "frontDelts" to "Front Delts",
+ "sideDelts" to "Side Delts",
+ "rearDelts" to "Rear Delts",
+ "bicepsLong" to "Biceps Long",
+ "bicepsShort" to "Biceps Short",
+ "brachialis" to "Brachialis",
+ "tricepsLong" to "Triceps Long",
+ "tricepsLateral" to "Triceps Lateral",
+ "tricepsMedial" to "Triceps Medial",
+ "forearms" to "Forearms",
+ "upperAbs" to "Upper Abs",
+ "lowerAbs" to "Lower Abs",
+ "obliques" to "Obliques",
+ "quads" to "Quads",
+ "hamstrings" to "Hamstrings",
+ "glutes" to "Glutes",
+ "calves" to "Calves",
+ "adductors" to "Adductors",
+ "abductors" to "Abductors",
+)
+
+/** Short abbreviation for bar chart labels (≤7 chars). */
+val FINE_MUSCLE_ABBREV = mapOf(
+ "upperChest" to "U.Chest",
+ "midChest" to "M.Chest",
+ "lowerChest" to "L.Chest",
+ "lats" to "Lats",
+ "upperBack" to "U.Back",
+ "traps" to "Traps",
+ "spinalErectors" to "Spine",
+ "frontDelts" to "F.Delts",
+ "sideDelts" to "S.Delts",
+ "rearDelts" to "R.Delt",
+ "bicepsLong" to "Bi.Long",
+ "bicepsShort" to "Bi.Shrt",
+ "brachialis" to "Brach.",
+ "tricepsLong" to "Tri.Lng",
+ "tricepsLateral" to "Tri.Lat",
+ "tricepsMedial" to "Tri.Med",
+ "forearms" to "Forearm",
+ "upperAbs" to "U.Abs",
+ "lowerAbs" to "L.Abs",
+ "obliques" to "Obliq.",
+ "quads" to "Quads",
+ "hamstrings" to "Hams",
+ "glutes" to "Glutes",
+ "calves" to "Calves",
+ "adductors" to "Adduct.",
+ "abductors" to "Abduct.",
+)
+
+// ── Movement-family templates (fractional contribution per fine muscle) ────────
+
+private val FAMILY_TEMPLATES = mapOf(
+ "incline_press" to mapOf("upperChest" to 0.36, "midChest" to 0.18, "frontDelts" to 0.20, "tricepsLong" to 0.08, "tricepsLateral" to 0.10, "tricepsMedial" to 0.08),
+ "decline_press" to mapOf("lowerChest" to 0.38, "midChest" to 0.20, "tricepsLong" to 0.08, "tricepsLateral" to 0.16, "tricepsMedial" to 0.10, "frontDelts" to 0.08),
+ "horizontal_press" to mapOf("midChest" to 0.38, "upperChest" to 0.16, "frontDelts" to 0.16, "tricepsLong" to 0.08, "tricepsLateral" to 0.14, "tricepsMedial" to 0.08),
+ "chest_fly" to mapOf("midChest" to 0.46, "upperChest" to 0.22, "lowerChest" to 0.14, "frontDelts" to 0.10, "bicepsLong" to 0.08),
+ "vertical_press" to mapOf("frontDelts" to 0.34, "sideDelts" to 0.22, "tricepsLong" to 0.16, "tricepsLateral" to 0.14, "tricepsMedial" to 0.08, "upperChest" to 0.06),
+ "vertical_pull" to mapOf("lats" to 0.42, "upperBack" to 0.16, "bicepsLong" to 0.12, "bicepsShort" to 0.12, "brachialis" to 0.08, "forearms" to 0.10),
+ "horizontal_pull" to mapOf("upperBack" to 0.30, "lats" to 0.26, "rearDelts" to 0.12, "traps" to 0.10, "bicepsLong" to 0.08, "bicepsShort" to 0.08, "brachialis" to 0.06),
+ "shrug" to mapOf("traps" to 0.56, "upperBack" to 0.22, "forearms" to 0.08, "spinalErectors" to 0.14),
+ "rear_delt" to mapOf("rearDelts" to 0.46, "upperBack" to 0.22, "traps" to 0.12, "sideDelts" to 0.12, "bicepsShort" to 0.08),
+ "lateral_raise" to mapOf("sideDelts" to 0.58, "frontDelts" to 0.14, "rearDelts" to 0.12, "traps" to 0.16),
+ "front_raise" to mapOf("frontDelts" to 0.62, "upperChest" to 0.16, "sideDelts" to 0.12, "traps" to 0.10),
+ "biceps_curl" to mapOf("bicepsLong" to 0.24, "bicepsShort" to 0.28, "brachialis" to 0.22, "forearms" to 0.26),
+ "hammer_curl" to mapOf("brachialis" to 0.32, "bicepsLong" to 0.20, "bicepsShort" to 0.18, "forearms" to 0.30),
+ "triceps_pushdown" to mapOf("tricepsLateral" to 0.38, "tricepsMedial" to 0.32, "tricepsLong" to 0.18, "forearms" to 0.12),
+ "triceps_overhead" to mapOf("tricepsLong" to 0.42, "tricepsLateral" to 0.26, "tricepsMedial" to 0.20, "frontDelts" to 0.12),
+ "squat" to mapOf("quads" to 0.36, "glutes" to 0.20, "adductors" to 0.12, "spinalErectors" to 0.10, "hamstrings" to 0.12, "calves" to 0.10),
+ "lunge" to mapOf("quads" to 0.28, "glutes" to 0.24, "hamstrings" to 0.14, "adductors" to 0.14, "calves" to 0.08, "abductors" to 0.12),
+ "hinge" to mapOf("hamstrings" to 0.28, "glutes" to 0.26, "spinalErectors" to 0.20, "adductors" to 0.10, "upperBack" to 0.08, "forearms" to 0.08),
+ "leg_extension" to mapOf("quads" to 0.78, "adductors" to 0.12, "calves" to 0.10),
+ "leg_curl" to mapOf("hamstrings" to 0.66, "glutes" to 0.12, "calves" to 0.08, "adductors" to 0.14),
+ "calf_raise" to mapOf("calves" to 0.84, "hamstrings" to 0.08, "quads" to 0.08),
+ "core_crunch" to mapOf("upperAbs" to 0.44, "lowerAbs" to 0.24, "obliques" to 0.32),
+ "leg_raise" to mapOf("lowerAbs" to 0.40, "upperAbs" to 0.24, "obliques" to 0.36),
+ "plank" to mapOf("upperAbs" to 0.26, "lowerAbs" to 0.22, "obliques" to 0.18, "spinalErectors" to 0.16, "glutes" to 0.10, "frontDelts" to 0.08),
+)
+
+// ── Library group → fine muscle expansion ────────────────────────────────────
+
+private val LIBRARY_GROUP_MAP = mapOf(
+ "chest" to mapOf("midChest" to 0.50, "upperChest" to 0.30, "lowerChest" to 0.20),
+ "shoulders" to mapOf("frontDelts" to 0.34, "sideDelts" to 0.34, "rearDelts" to 0.32),
+ "back" to mapOf("upperBack" to 0.42, "lats" to 0.34, "traps" to 0.14, "spinalErectors" to 0.10),
+ "middle back" to mapOf("upperBack" to 0.60, "traps" to 0.25, "spinalErectors" to 0.15),
+ "lower back" to mapOf("spinalErectors" to 0.72, "upperBack" to 0.12, "glutes" to 0.16),
+ "lats" to mapOf("lats" to 0.76, "upperBack" to 0.16, "bicepsShort" to 0.08),
+ "lat" to mapOf("lats" to 0.76, "upperBack" to 0.16, "bicepsShort" to 0.08),
+ "traps" to mapOf("traps" to 0.74, "upperBack" to 0.18, "rearDelts" to 0.08),
+ "trap" to mapOf("traps" to 0.74, "upperBack" to 0.18, "rearDelts" to 0.08),
+ "quadriceps" to mapOf("quads" to 0.78, "adductors" to 0.12, "calves" to 0.10),
+ "quads" to mapOf("quads" to 0.78, "adductors" to 0.12, "calves" to 0.10),
+ "hamstrings" to mapOf("hamstrings" to 0.68, "glutes" to 0.18, "adductors" to 0.14),
+ "glutes" to mapOf("glutes" to 0.62, "hamstrings" to 0.18, "abductors" to 0.20),
+ "calves" to mapOf("calves" to 0.90, "hamstrings" to 0.10),
+ "adductors" to mapOf("adductors" to 0.78, "quads" to 0.12, "hamstrings" to 0.10),
+ "abductors" to mapOf("abductors" to 0.72, "glutes" to 0.28),
+ "front delts" to mapOf("frontDelts" to 0.76, "sideDelts" to 0.14, "upperChest" to 0.10),
+ "side delts" to mapOf("sideDelts" to 0.78, "frontDelts" to 0.12, "rearDelts" to 0.10),
+ "rear delts" to mapOf("rearDelts" to 0.74, "upperBack" to 0.18, "traps" to 0.08),
+ "rotator cuff" to mapOf("rearDelts" to 0.28, "sideDelts" to 0.16, "frontDelts" to 0.16, "upperBack" to 0.12, "traps" to 0.10, "forearms" to 0.18),
+ "biceps" to mapOf("bicepsLong" to 0.28, "bicepsShort" to 0.32, "brachialis" to 0.20, "forearms" to 0.20),
+ "biceps long head" to mapOf("bicepsLong" to 0.60, "bicepsShort" to 0.16, "brachialis" to 0.10, "forearms" to 0.14),
+ "biceps short head" to mapOf("bicepsShort" to 0.60, "bicepsLong" to 0.16, "brachialis" to 0.10, "forearms" to 0.14),
+ "brachialis" to mapOf("brachialis" to 0.56, "bicepsLong" to 0.18, "bicepsShort" to 0.14, "forearms" to 0.12),
+ "triceps" to mapOf("tricepsLong" to 0.34, "tricepsLateral" to 0.34, "tricepsMedial" to 0.24, "forearms" to 0.08),
+ "triceps long head" to mapOf("tricepsLong" to 0.62, "tricepsLateral" to 0.20, "tricepsMedial" to 0.10, "frontDelts" to 0.08),
+ "triceps lateral head" to mapOf("tricepsLateral" to 0.62, "tricepsLong" to 0.20, "tricepsMedial" to 0.10, "forearms" to 0.08),
+ "triceps medial head" to mapOf("tricepsMedial" to 0.58, "tricepsLateral" to 0.20, "tricepsLong" to 0.14, "forearms" to 0.08),
+ "forearms" to mapOf("forearms" to 0.82, "brachialis" to 0.18),
+ "abdominals" to mapOf("upperAbs" to 0.42, "lowerAbs" to 0.32, "obliques" to 0.26),
+ "upper abs" to mapOf("upperAbs" to 0.64, "lowerAbs" to 0.18, "obliques" to 0.18),
+ "lower abs" to mapOf("lowerAbs" to 0.62, "upperAbs" to 0.18, "obliques" to 0.20),
+ "obliques" to mapOf("obliques" to 0.74, "upperAbs" to 0.14, "lowerAbs" to 0.12),
+ "core" to mapOf("upperAbs" to 0.34, "lowerAbs" to 0.28, "obliques" to 0.20, "spinalErectors" to 0.18),
+)
+
+// ── Specific exercise overrides ───────────────────────────────────────────────
+
+private val ANCHOR_OVERRIDES = mapOf(
+ "barbellbenchpress" to mapOf("upperChest" to 0.18, "midChest" to 0.42, "frontDelts" to 0.14, "tricepsLong" to 0.08, "tricepsLateral" to 0.10, "tricepsMedial" to 0.08),
+ "inclinebarbellbenchpress" to mapOf("upperChest" to 0.36, "midChest" to 0.16, "frontDelts" to 0.18, "tricepsLong" to 0.08, "tricepsLateral" to 0.12, "tricepsMedial" to 0.10),
+ "dumbbellbenchpress" to mapOf("upperChest" to 0.20, "midChest" to 0.38, "frontDelts" to 0.14, "tricepsLong" to 0.08, "tricepsLateral" to 0.10, "tricepsMedial" to 0.10),
+ "barbelloverheadpress" to mapOf("frontDelts" to 0.34, "sideDelts" to 0.22, "tricepsLong" to 0.16, "tricepsLateral" to 0.14, "tricepsMedial" to 0.08, "upperChest" to 0.06),
+ "barbellbentoverrow" to mapOf("upperBack" to 0.30, "lats" to 0.28, "rearDelts" to 0.10, "traps" to 0.12, "bicepsShort" to 0.08, "brachialis" to 0.06, "spinalErectors" to 0.06),
+ "barbellfullsquat" to mapOf("quads" to 0.38, "glutes" to 0.20, "adductors" to 0.12, "hamstrings" to 0.10, "spinalErectors" to 0.10, "calves" to 0.10),
+ "barbelldeadlift" to mapOf("hamstrings" to 0.24, "glutes" to 0.22, "spinalErectors" to 0.22, "upperBack" to 0.12, "traps" to 0.10, "forearms" to 0.10),
+ "romaniandeadlift" to mapOf("hamstrings" to 0.30, "glutes" to 0.26, "spinalErectors" to 0.20, "adductors" to 0.10, "forearms" to 0.06, "upperBack" to 0.08),
+ "latpulldown" to mapOf("lats" to 0.46, "upperBack" to 0.16, "bicepsLong" to 0.12, "bicepsShort" to 0.10, "brachialis" to 0.08, "forearms" to 0.08),
+ "pullup" to mapOf("lats" to 0.42, "upperBack" to 0.18, "bicepsLong" to 0.12, "bicepsShort" to 0.12, "brachialis" to 0.08, "forearms" to 0.08),
+ "legpress" to mapOf("quads" to 0.42, "glutes" to 0.20, "adductors" to 0.14, "hamstrings" to 0.12, "calves" to 0.12),
+ "legextension" to mapOf("quads" to 0.82, "adductors" to 0.10, "calves" to 0.08),
+ "legcurlmachine" to mapOf("hamstrings" to 0.72, "glutes" to 0.10, "calves" to 0.08, "adductors" to 0.10),
+ "standingcalfraise" to mapOf("calves" to 0.88, "hamstrings" to 0.06, "quads" to 0.06),
+ "seatedcalfraise" to mapOf("calves" to 0.90, "hamstrings" to 0.10),
+)
+
+// ── Movement-family detection rules ──────────────────────────────────────────
+
+private data class FamilyRule(val id: String, val score: Int, val patterns: List)
+
+private val FAMILY_RULES = listOf(
+ FamilyRule("incline_press", 10, listOf("incline.*press", "incline.*bench", "incline.*push").map(::Regex)),
+ FamilyRule("decline_press", 10, listOf("decline.*press", "decline.*bench", "dip").map(::Regex)),
+ FamilyRule("chest_fly", 9, listOf("fly", "crossover", "pec deck").map(::Regex)),
+ FamilyRule("horizontal_press", 8, listOf("\\bbench\\b", "\\bpress\\b", "push.?up", "pushup").map(::Regex)),
+ FamilyRule("vertical_press", 10, listOf("shoulder press", "overhead press", "\\bohp\\b", "military press", "arnold press").map(::Regex)),
+ FamilyRule("vertical_pull", 9, listOf("pull.?up", "chin.?up", "pulldown", "lat pull").map(::Regex)),
+ FamilyRule("horizontal_pull", 9, listOf("\\brow\\b", "meadows", "seal row", "pullover").map(::Regex)),
+ FamilyRule("shrug", 8, listOf("shrug").map(::Regex)),
+ FamilyRule("rear_delt", 8, listOf("rear delt", "reverse pec", "reverse fly", "face pull").map(::Regex)),
+ FamilyRule("lateral_raise", 8, listOf("lateral raise", "side raise").map(::Regex)),
+ FamilyRule("front_raise", 7, listOf("front raise").map(::Regex)),
+ FamilyRule("hammer_curl", 9, listOf("hammer curl", "rope hammer").map(::Regex)),
+ FamilyRule("biceps_curl", 8, listOf("curl", "preacher", "concentration", "zottman").map(::Regex)),
+ FamilyRule("triceps_overhead", 9, listOf("overhead extension", "skull crusher", "skullcrusher", "lying extension").map(::Regex)),
+ FamilyRule("triceps_pushdown", 8, listOf("pushdown", "kickback").map(::Regex)),
+ FamilyRule("hinge", 10, listOf("deadlift", "\\brdl\\b", "romanian", "good morning", "hip thrust", "glute bridge").map(::Regex)),
+ FamilyRule("lunge", 9, listOf("split squat", "lunge", "step.?up", "walking lunge").map(::Regex)),
+ FamilyRule("squat", 10, listOf("squat", "hack squat", "leg press", "belt squat").map(::Regex)),
+ FamilyRule("leg_extension", 10, listOf("leg extension").map(::Regex)),
+ FamilyRule("leg_curl", 10, listOf("leg curl", "nordic", "glute ham").map(::Regex)),
+ FamilyRule("calf_raise", 10, listOf("calf").map(::Regex)),
+ FamilyRule("core_crunch", 10, listOf("crunch", "sit.?up", "cable crunch").map(::Regex)),
+ FamilyRule("leg_raise", 10, listOf("leg raise", "toes to bar", "v.?up", "hanging knee").map(::Regex)),
+ FamilyRule("plank", 9, listOf("plank", "ab wheel", "hollow", "carry").map(::Regex)),
+)
+
+// ── Cross-system grouping maps ────────────────────────────────────────────────
+
+/**
+ * Maps each fine muscle to a Push / Pull / Legs / Core training-split bucket.
+ * Used by TrainingIntelligenceEngine for volume landmarks and movement balance.
+ */
+val FINE_MUSCLE_TO_PPL: Map = mapOf(
+ // Push
+ "upperChest" to "Push", "midChest" to "Push", "lowerChest" to "Push",
+ "frontDelts" to "Push", "sideDelts" to "Push",
+ "tricepsLong" to "Push", "tricepsLateral" to "Push", "tricepsMedial" to "Push",
+ // Pull
+ "lats" to "Pull", "upperBack" to "Pull", "traps" to "Pull",
+ "spinalErectors" to "Pull", "rearDelts" to "Pull",
+ "bicepsLong" to "Pull", "bicepsShort" to "Pull", "brachialis" to "Pull",
+ "forearms" to "Pull",
+ // Legs
+ "quads" to "Legs", "hamstrings" to "Legs", "glutes" to "Legs",
+ "calves" to "Legs", "adductors" to "Legs", "abductors" to "Legs",
+ // Core
+ "upperAbs" to "Core", "lowerAbs" to "Core", "obliques" to "Core",
+)
+
+/**
+ * Maps each fine muscle to its recovery region (Push / Pull / Legs / Arms / Shoulders / Core).
+ * Used by RecoveryReadinessEngine for the body-map heatmap.
+ */
+val FINE_MUSCLE_TO_REGION: Map = mapOf(
+ // Chest → Push recovery
+ "upperChest" to "Push", "midChest" to "Push", "lowerChest" to "Push",
+ // Back → Pull recovery
+ "lats" to "Pull", "upperBack" to "Pull", "traps" to "Pull",
+ "spinalErectors" to "Pull",
+ // Delts → Shoulders recovery
+ "frontDelts" to "Shoulders", "sideDelts" to "Shoulders", "rearDelts" to "Shoulders",
+ // Elbow flexors / extensors → Arms recovery
+ "bicepsLong" to "Arms", "bicepsShort" to "Arms", "brachialis" to "Arms",
+ "tricepsLong" to "Arms", "tricepsLateral" to "Arms", "tricepsMedial" to "Arms",
+ "forearms" to "Arms",
+ // Midsection → Core recovery
+ "upperAbs" to "Core", "lowerAbs" to "Core", "obliques" to "Core",
+ // Lower body → Legs recovery
+ "quads" to "Legs", "hamstrings" to "Legs", "glutes" to "Legs",
+ "calves" to "Legs", "adductors" to "Legs", "abductors" to "Legs",
+)
+
+/**
+ * Maps each fine muscle to a radar-chart bucket (Chest / Back / Arms / Shoulders / Legs / Core).
+ * Used by VolumeAnalyticsScreen to fold granular data into the 6-axis radar.
+ */
+val FINE_MUSCLE_TO_RADAR: Map = mapOf(
+ "upperChest" to "Chest", "midChest" to "Chest", "lowerChest" to "Chest",
+ "lats" to "Back", "upperBack" to "Back", "traps" to "Back",
+ "spinalErectors" to "Back",
+ "frontDelts" to "Shoulders", "sideDelts" to "Shoulders", "rearDelts" to "Shoulders",
+ "bicepsLong" to "Arms", "bicepsShort" to "Arms", "brachialis" to "Arms",
+ "tricepsLong" to "Arms", "tricepsLateral" to "Arms", "tricepsMedial" to "Arms",
+ "forearms" to "Arms",
+ "upperAbs" to "Core", "lowerAbs" to "Core", "obliques" to "Core",
+ "quads" to "Legs", "hamstrings" to "Legs", "glutes" to "Legs",
+ "calves" to "Legs", "adductors" to "Legs", "abductors" to "Legs",
+)
+
+/**
+ * Folds a fine-muscle contribution map (muscle → fraction, summing ≈1.0) into coarse region
+ * buckets using [regionMap], weighting fractions by the number of working sets.
+ */
+fun foldContributions(contributions: Map, regionMap: Map): Map {
+ val out = mutableMapOf()
+ contributions.forEach { (muscle, frac) ->
+ val bucket = regionMap[muscle] ?: return@forEach
+ out[bucket] = (out[bucket] ?: 0.0) + frac
+ }
+ return out
+}
+
+/**
+ * Folds the output of [computeGranularVolume] into coarse radar buckets (Chest/Back/…)
+ * using [FINE_MUSCLE_TO_RADAR], returning Int set counts (rounded).
+ * The [axes] list defines which buckets must always appear in the output.
+ */
+fun foldGranularToRadar(granular: Map, axes: List): Map {
+ val out = axes.associateWith { 0f }.toMutableMap()
+ granular.forEach { (muscle, sets) ->
+ val bucket = FINE_MUSCLE_TO_RADAR[muscle] ?: return@forEach
+ if (bucket in out) out[bucket] = (out[bucket] ?: 0f) + sets
+ }
+ return out.mapValues { it.value.toInt() }
+}
+
+// ── Core engine functions ─────────────────────────────────────────────────────
+
+private fun normalizeKey(name: String): String =
+ name.lowercase().replace(Regex("[^a-z0-9]+"), "")
+
+internal fun detectFamily(name: String): String {
+ val text = name.lowercase()
+ var best = "" to 0
+ FAMILY_RULES.forEach { rule ->
+ if (rule.score > best.second && rule.patterns.any { it.containsMatchIn(text) }) {
+ best = rule.id to rule.score
+ }
+ }
+ // Muscle-name fallback if no pattern matched
+ if (best.second == 0) {
+ return when {
+ "chest" in text -> "horizontal_press"
+ "lat" in text || "back" in text -> "horizontal_pull"
+ "squat" in text || "quad" in text -> "squat"
+ "deadlift" in text || "hinge" in text || "glute" in text -> "hinge"
+ "shoulder" in text || "delt" in text -> "vertical_press"
+ "curl" in text || "bicep" in text -> "biceps_curl"
+ "tricep" in text || "extension" in text -> "triceps_pushdown"
+ "calf" in text -> "calf_raise"
+ "ab" in text || "core" in text -> "core_crunch"
+ else -> ""
+ }
+ }
+ return best.first
+}
+
+private fun normalize(raw: Map): Map {
+ val cleaned = raw.filter { (k, _) -> k in FINE_MUSCLES }
+ val total = cleaned.values.sum().takeIf { it > 0 } ?: return emptyMap()
+ return cleaned.mapValues { it.value / total }
+}
+
+private fun mergeWeighted(a: Map, wA: Double, b: Map, wB: Double): Map {
+ val merged = linkedMapOf()
+ a.forEach { (k, v) -> merged[k] = (merged[k] ?: 0.0) + v * wA }
+ b.forEach { (k, v) -> merged[k] = (merged[k] ?: 0.0) + v * wB }
+ return normalize(merged)
+}
+
+private fun libraryContribution(exercise: HistoryExercise): Map {
+ val hints = (exercise.primaryMuscles + listOfNotNull(exercise.primaryMuscle))
+ .map { it.trim().lowercase() }
+ .filter { it.isNotBlank() }
+ val merged = linkedMapOf()
+ hints.forEach { hint ->
+ LIBRARY_GROUP_MAP[hint]?.forEach { (k, v) -> merged[k] = (merged[k] ?: 0.0) + v }
+ }
+ return normalize(merged)
+}
+
+/** Resolve fractional contribution map for a single exercise (sums to ≈1.0). */
+fun resolveContribution(exercise: HistoryExercise): Map {
+ // 1. Anchor override — exercise-specific ground truth
+ val anchorKey = normalizeKey(exercise.name)
+ ANCHOR_OVERRIDES[anchorKey]?.let { return normalize(it) }
+
+ // 2. Family template from movement pattern detection
+ val family = detectFamily(exercise.name)
+ val template = FAMILY_TEMPLATES[family]?.let(::normalize) ?: emptyMap()
+
+ // 3. Library expansion from primaryMuscles metadata
+ val library = libraryContribution(exercise)
+
+ return when {
+ template.isNotEmpty() && library.isNotEmpty() -> mergeWeighted(template, 0.72, library, 0.28)
+ template.isNotEmpty() -> template
+ library.isNotEmpty() -> library
+ else -> emptyMap()
+ }
+}
+
+/**
+ * Aggregate fractional effective sets per fine muscle across a workout history.
+ * Each working set contributes [contribution_fraction] effective sets to each fine muscle.
+ * Returns map sorted descending, keys are camelCase FINE_MUSCLES keys.
+ */
+fun computeGranularVolume(history: List): Map {
+ val totals = linkedMapOf()
+ history.forEach { workout ->
+ workout.exercises.forEach { ex ->
+ val workingSets = ex.sets.count { it.type != "warmup" }
+ if (workingSets > 0) {
+ val contrib = resolveContribution(ex)
+ if (contrib.isNotEmpty()) {
+ contrib.forEach { (muscle, fraction) ->
+ totals[muscle] = (totals[muscle] ?: 0.0) + workingSets * fraction
+ }
+ } else {
+ // Fallback: credit the broad primaryMuscle group
+ val broad = (ex.primaryMuscle ?: ex.primaryMuscles.firstOrNull()).orEmpty().lowercase()
+ val fallback = LIBRARY_GROUP_MAP[broad]
+ if (fallback != null) {
+ val norm = normalize(fallback)
+ norm.forEach { (muscle, fraction) ->
+ totals[muscle] = (totals[muscle] ?: 0.0) + workingSets * fraction
+ }
+ }
+ }
+ }
+ }
+ }
+ return totals
+ .filter { it.value >= 0.05 }
+ .entries
+ .sortedByDescending { it.value }
+ .associate { it.key to it.value.toFloat() }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/PrLinkingEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/PrLinkingEngine.kt
new file mode 100644
index 0000000..ee56781
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/PrLinkingEngine.kt
@@ -0,0 +1,41 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.util.normalizeExerciseNameKey
+
+object PrLinkingEngine {
+ private val aliases = linkedMapOf(
+ "barbell_bench_press" to "bench_press",
+ "dumbbell_bench_press" to "bench_press",
+ "incline_barbell_bench_press" to "incline_press",
+ "incline_dumbbell_press" to "incline_press",
+ "lat_pulldown" to "vertical_pull",
+ "weighted_pull_up" to "vertical_pull",
+ "pull_up" to "vertical_pull",
+ "barbell_row" to "row",
+ "seated_cable_row" to "row",
+ "romanian_deadlift" to "hip_hinge",
+ "deadlift" to "hip_hinge",
+ "back_squat" to "squat",
+ "front_squat" to "squat",
+ )
+
+ fun getPrGroupId(
+ name: String,
+ primaryMuscle: String?,
+ equipment: String?,
+ category: String?,
+ mode: String = "safe",
+ ): String? {
+ val normalized = normalizeExerciseNameKey(name)
+ if (normalized.isBlank()) return null
+ val canonical = aliases[normalized] ?: normalized
+ val muscleKey = normalizeExerciseNameKey(primaryMuscle.orEmpty()).ifBlank { "unknown_muscle" }
+ val equipmentKey = normalizeExerciseNameKey(equipment.orEmpty()).ifBlank { "unknown_equipment" }
+ val categoryKey = normalizeExerciseNameKey(category.orEmpty()).ifBlank { "general" }
+ return when (mode.lowercase()) {
+ "strict" -> "strict_${equipmentKey}_${canonical}"
+ "broad" -> "broad_${muscleKey}_${categoryKey}_${canonical}"
+ else -> "safe_${muscleKey}_${canonical}"
+ }
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/RecoveryReadinessEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/RecoveryReadinessEngine.kt
new file mode 100644
index 0000000..5ffe64b
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/RecoveryReadinessEngine.kt
@@ -0,0 +1,146 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.data.health.BiometricSnapshot
+import com.ironlog.app.domain.gamification.parseHistoryInstant
+import com.ironlog.app.ui.model.HistoryEntry
+import java.time.Instant
+import kotlin.math.exp
+import kotlin.math.roundToInt
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class ManualRecoveryInput(
+ val soreness: Int = 0,
+ val sleepQuality: Int = 0,
+ val energy: Int = 0,
+ val notes: String = "",
+ val recordedAt: Long = 0L
+)
+
+data class RecoveryScore(val score: Int, val state: String, val explanation: String)
+
+object RecoveryReadinessEngine {
+ /**
+ * GAP-20: Pain-flagged regions are forced to 0.0 readiness regardless of training load.
+ * All other regions are computed normally.
+ */
+ fun readinessByRegion(
+ history: List,
+ painFlags: Set = emptySet(),
+ nowEpochMs: Long = System.currentTimeMillis(),
+ ): Map {
+ val load = mutableMapOf("Push" to 0.0, "Pull" to 0.0, "Legs" to 0.0, "Core" to 0.0, "Arms" to 0.0, "Shoulders" to 0.0)
+ history.forEach { w ->
+ val t = parseHistoryInstant(w.date)?.toEpochMilli() ?: return@forEach
+ val hours = ((nowEpochMs - t).coerceAtLeast(0) / 3_600_000.0)
+ val decay = exp(-0.03 * hours)
+ w.exercises.forEach { ex ->
+ val workingSets = ex.sets.count { it.type != "warmup" }.toDouble()
+ if (workingSets > 0) {
+ val contrib = resolveContribution(ex)
+ if (contrib.isNotEmpty()) {
+ // Distribute load across recovery regions proportionally
+ val regionFold = foldContributions(contrib, FINE_MUSCLE_TO_REGION)
+ regionFold.forEach { (region, frac) ->
+ load[region] = (load[region] ?: 0.0) + workingSets * frac * decay
+ }
+ } else {
+ // Fallback: coarse keyword classification
+ val key = when ((ex.primaryMuscle ?: ex.primaryMuscles.firstOrNull().orEmpty()).lowercase()) {
+ "chest" -> "Push"
+ "back", "lats" -> "Pull"
+ "quads", "hamstrings", "glutes", "calves", "legs", "leg" -> "Legs"
+ "biceps", "triceps", "arms", "forearms" -> "Arms"
+ "shoulders", "delts" -> "Shoulders"
+ else -> "Core"
+ }
+ load[key] = (load[key] ?: 0.0) + workingSets * decay
+ }
+ }
+ }
+ }
+ val base = load.mapValues { (_, v) -> (1.0 - (v / 8.0).coerceIn(0.0, 1.0)).coerceAtLeast(0.05) }
+ return if (painFlags.isEmpty()) base else base.mapValues { (region, v) -> if (region in painFlags) 0.0 else v }
+ }
+
+ private fun scoreFromManualInput(input: ManualRecoveryInput?, nowEpochMs: Long): Int? {
+ if (input == null) return null
+ if (input.soreness == 0 && input.sleepQuality == 0 && input.energy == 0) return null
+ // Ensure manual input isn't too stale (e.g., > 48 hours)
+ if (input.recordedAt <= 0L || nowEpochMs - input.recordedAt > 48 * 3600_000L) return null
+
+ val s = input.soreness.toDouble()
+ val sl = input.sleepQuality.toDouble()
+ val e = input.energy.toDouble()
+ val normalized = (((sl + e) / 10.0) - (s / 10.0)).coerceIn(-1.0, 1.0)
+ return (normalized * 15.0).roundToInt()
+ }
+
+ fun score(
+ readiness: Map,
+ manualInput: ManualRecoveryInput? = null,
+ nowEpochMs: Long = System.currentTimeMillis(),
+ ): RecoveryScore {
+ val rows = readiness.values.filter { it.isFinite() }
+ val baseScore = if (rows.isEmpty()) 70 else ((rows.average() * 100).coerceIn(1.0, 99.0)).roundToInt()
+
+ val manualOffset = scoreFromManualInput(manualInput, nowEpochMs)
+ val s = (baseScore + (manualOffset ?: 0)).coerceIn(1, 99)
+
+ val state = if (s >= 78) "fresh" else if (s >= 55) "recovering" else "fatigued"
+ val explanation = if (manualOffset == null) {
+ "Based on recent muscle workload and time since training."
+ } else {
+ "Blended from workload history and your soreness/sleep/energy check-in."
+ }
+ return RecoveryScore(s, state, explanation)
+ }
+
+ fun suggestions(readiness: Map): List {
+ val rows = readiness.entries.sortedByDescending { it.value }
+ if (rows.isEmpty()) return emptyList()
+ val top = rows.first()
+ val low = rows.last()
+ val out = mutableListOf("${top.key} is most recovered (${(top.value * 100).roundToInt()}%).")
+ if (top.key != low.key) out += "${low.key} is least recovered (${(low.value * 100).roundToInt()}%), reduce volume."
+ return out
+ }
+
+ /**
+ * Blends a training-load [readinessScore] (0.0–1.0) with biometric data
+ * from Health Connect.
+ *
+ * Weights:
+ * - Training load readiness: 60%
+ * - Sleep quality: 25%
+ * - HRV: 15%
+ *
+ * If no biometric data is available (all nulls), returns [readinessScore] unchanged.
+ *
+ * @param readinessScore Overall score from [score] (0.0 = very fatigued, 1.0 = fully ready).
+ * @param biometrics Latest snapshot from HealthConnectRepository.readBiometricSnapshot().
+ */
+ fun blendWithBiometric(readinessScore: Double, biometrics: BiometricSnapshot): Double {
+ fun sleepScore(hours: Double) = ((hours - 4.0) / 4.0).coerceIn(0.0, 1.0)
+ fun hrvScore(rmssd: Double) = ((rmssd - 20.0) / 60.0).coerceIn(0.0, 1.0)
+
+ val hasSleep = biometrics.sleepHours != null
+ val hasHrv = biometrics.hrvRmssd != null
+
+ if (!hasSleep && !hasHrv) return readinessScore
+
+ var weightedSum = readinessScore * 0.60
+ var totalWeight = 0.60
+
+ if (hasSleep) {
+ weightedSum += sleepScore(biometrics.sleepHours!!) * 0.25
+ totalWeight += 0.25
+ }
+ if (hasHrv) {
+ weightedSum += hrvScore(biometrics.hrvRmssd!!) * 0.15
+ totalWeight += 0.15
+ }
+
+ return (weightedSum / totalWeight).coerceIn(0.0, 1.0)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/SubstitutionEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/SubstitutionEngine.kt
new file mode 100644
index 0000000..e99361d
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/SubstitutionEngine.kt
@@ -0,0 +1,43 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.data.model.ExerciseFilters
+import com.ironlog.app.data.model.LegacyExerciseShape
+
+object SubstitutionEngine {
+ data class AlternativesResult(
+ val bestMatches: List,
+ val sameMuscle: List,
+ val sameEquipment: List,
+ val fallback: List,
+ ) {
+ companion object { val EMPTY = AlternativesResult(emptyList(), emptyList(), emptyList(), emptyList()) }
+ }
+
+ fun buildExerciseAlternatives(
+ exercise: LegacyExerciseShape,
+ candidates: List,
+ filters: ExerciseFilters,
+ limit: Int,
+ ): AlternativesResult {
+ val pool = candidates
+ .asSequence()
+ .filter { it.id != exercise.id }
+ .filter { filters.primaryMuscle?.let { m -> it.primaryMuscle.equals(m, true) } ?: true }
+ .filter { filters.equipment?.let { e -> it.equipment.equals(e, true) } ?: true }
+ .filter { filters.category?.let { c -> it.category.equals(c, true) } ?: true }
+ .toList()
+ val scored = pool.map { candidate ->
+ val muscleScore = if (candidate.primaryMuscle.equals(exercise.primaryMuscle, true)) 3 else 0
+ val equipScore = if (candidate.equipment.equals(exercise.equipment, true)) 2 else 0
+ val patternScore = if (candidate.movementPattern.equals(exercise.movementPattern, true)) 2 else 0
+ val categoryScore = if (candidate.category.equals(exercise.category, true)) 1 else 0
+ val total = muscleScore + equipScore + patternScore + categoryScore
+ candidate to total
+ }.sortedByDescending { it.second }
+ val best = scored.filter { it.second >= 5 }.map { it.first }.take(limit)
+ val sameMuscle = scored.filter { it.first.primaryMuscle.equals(exercise.primaryMuscle, true) }.map { it.first }.take(limit)
+ val sameEquipment = scored.filter { it.first.equipment.equals(exercise.equipment, true) }.map { it.first }.take(limit)
+ val fallback = scored.map { it.first }.take(limit)
+ return AlternativesResult(best, sameMuscle, sameEquipment, fallback)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/TrainingIntelligenceEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/TrainingIntelligenceEngine.kt
new file mode 100644
index 0000000..ec22e4d
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/TrainingIntelligenceEngine.kt
@@ -0,0 +1,357 @@
+package com.ironlog.app.domain.intelligence
+
+import com.ironlog.app.domain.gamification.parseHistoryInstant
+import com.ironlog.app.ui.model.HistoryEntry
+import java.time.LocalDate
+import java.time.ZoneId
+import java.time.temporal.ChronoUnit
+import java.time.temporal.WeekFields
+import kotlin.math.max
+import kotlin.math.roundToInt
+
+data class VolumeLandmark(val sets: Int, val status: String, val min: Int, val max: Int, val optimal: Int)
+
+data class NeuralFatigueResult(
+ val isFlagged: Boolean,
+ val consecutiveDays: Int,
+ val lastHeavyExercises: List = emptyList(),
+)
+
+data class TrainingIntelligenceSnapshot(
+ /** 6 anatomical groups (Chest/Back/Legs/Shoulders/Arms/Core), based on current ISO week. */
+ val setsByMuscle: Map,
+ val volumeLandmarks: Map,
+ /** Push = Chest+Shoulders %, Pull = Back %, Legs = Legs % */
+ val movementBalance: Map,
+ val prLast30: Int,
+ val prPrev30: Int,
+ val prTrend: String, // "accelerating" | "steady" | "slowing"
+ val prVelocity30d: Float, // prLast30 / session count (0-1)
+ val bestWindow: String,
+ val trainingAgeYears: Double,
+ val trainingAgeLabel: String,
+ val trainingAgeTip: String,
+ val neuralFatigue: NeuralFatigueResult,
+)
+
+object TrainingIntelligenceEngine {
+
+ // 6 anatomical groups — matches RN's MUSCLE_GROUPS / VOLUME_LANDMARKS
+ private val VOLUME_LANDMARKS_MAP = mapOf(
+ "Chest" to Triple(10, 20, 14),
+ "Back" to Triple(10, 22, 16),
+ "Legs" to Triple(12, 22, 16),
+ "Shoulders" to Triple(8, 16, 12),
+ "Arms" to Triple(8, 16, 12),
+ "Core" to Triple(6, 16, 10),
+ )
+
+ private val HEAVY_COMPOUNDS = setOf(
+ "squat", "deadlift", "bench press", "overhead press", "ohp", "barbell row",
+ "power clean", "front squat", "sumo", "romanian",
+ )
+
+ /** Warmup builder for working sets; rounds to nearest 2.5kg and keeps at least bar weight. */
+ fun generateWarmupSets(workingWeightKg: Double, barWeightKg: Double = 20.0): List> {
+ val base = workingWeightKg.coerceAtLeast(barWeightKg)
+ val steps = listOf(
+ 0.40 to 8,
+ 0.55 to 5,
+ 0.70 to 3,
+ 0.85 to 1,
+ )
+ return steps.map { (pct, reps) ->
+ val w = ((base * pct) / 2.5).roundToInt() * 2.5
+ val clamped = w.coerceAtLeast(barWeightKg.coerceAtMost(base))
+ clamped to reps
+ }.distinctBy { it.first to it.second }
+ }
+
+ fun build(
+ history: List,
+ @Suppress("UNUSED_PARAMETER") prCount: Int = 0,
+ activeDraftContribution: Map = emptyMap(),
+ ): TrainingIntelligenceSnapshot {
+ val last30 = history.filter { ageDays(it.date) <= 30 }
+ val byGroup = setsByGroup(history, activeDraftContribution)
+ val (prLast30, prPrev30, prTrend) = computePrVelocity(history)
+ val velocity = if (last30.isEmpty()) 0f
+ else (prLast30.toFloat() / last30.size.toFloat()).coerceIn(0f, 1f)
+ val (years, label, tip) = computeTrainingAge(history)
+ return TrainingIntelligenceSnapshot(
+ setsByMuscle = byGroup,
+ volumeLandmarks = computeVolumeLandmarks(byGroup),
+ movementBalance = movementBalance(byGroup),
+ prLast30 = prLast30,
+ prPrev30 = prPrev30,
+ prTrend = prTrend,
+ prVelocity30d = velocity,
+ bestWindow = bestPerformanceWindow(last30),
+ trainingAgeYears = years,
+ trainingAgeLabel = label,
+ trainingAgeTip = tip,
+ neuralFatigue = computeNeuralFatigue(history),
+ )
+ }
+
+ /** Public entry-point for VolumeInterpretationEngine and other callers. */
+ fun buildLandmarks(byMuscle: Map): Map =
+ computeVolumeLandmarks(byMuscle)
+
+ // ── Volume landmarks ──────────────────────────────────────────────────────
+
+ private fun computeVolumeLandmarks(byGroup: Map): Map {
+ val result = linkedMapOf()
+ VOLUME_LANDMARKS_MAP.forEach { (group, triple) ->
+ val (min, max, optimal) = triple
+ val sets = byGroup[group] ?: 0
+ val status = when {
+ sets < min -> "low"
+ sets > max -> "high"
+ else -> "optimal"
+ }
+ result[group] = VolumeLandmark(sets = sets, status = status, min = min, max = max, optimal = optimal)
+ }
+ return result
+ }
+
+ // ── Sets-by-group (current ISO week only) ─────────────────────────────────
+
+ /**
+ * Accumulates working sets per 6 anatomical group using [FINE_MUSCLE_TO_RADAR].
+ * Uses the current ISO week (Mon–now) to match RN's weekly volume card behaviour.
+ */
+ private fun setsByGroup(history: List, activeDraftContribution: Map): Map {
+ val thisWeekStart = LocalDate.now().with(WeekFields.ISO.dayOfWeek(), 1L)
+ val weekHistory = history.filter { entry ->
+ val d = parseHistoryInstant(entry.date)?.atZone(ZoneId.systemDefault())?.toLocalDate()
+ ?: return@filter false
+ !d.isBefore(thisWeekStart)
+ }
+ val accumulator = linkedMapOf(
+ "Chest" to 0.0, "Back" to 0.0, "Legs" to 0.0,
+ "Shoulders" to 0.0, "Arms" to 0.0, "Core" to 0.0,
+ )
+ weekHistory.forEach { w ->
+ w.exercises.forEach { ex ->
+ val n = ex.sets.count { it.type != "warmup" }
+ if (n > 0) {
+ val contrib = resolveContribution(ex)
+ if (contrib.isNotEmpty()) {
+ foldContributions(contrib, FINE_MUSCLE_TO_RADAR).forEach { (bucket, frac) ->
+ accumulator[bucket] = (accumulator[bucket] ?: 0.0) + n * frac
+ }
+ } else {
+ val bucket = dominantRadarBucket(ex)
+ accumulator[bucket] = (accumulator[bucket] ?: 0.0) + n
+ }
+ }
+ }
+ }
+ val base = accumulator.mapValues { it.value.roundToInt() }.toMutableMap()
+ // Draft contribution: PPL keys title-cased → map to radar buckets
+ activeDraftContribution.forEach { (k, v) ->
+ val key = k.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
+ val radarKey = when (key) {
+ "Push" -> "Chest"; "Pull" -> "Back"
+ "Legs" -> "Legs"; "Core" -> "Core"
+ else -> if (key in base) key else null
+ }
+ if (radarKey != null && v > 0) base[radarKey] = (base[radarKey] ?: 0) + v
+ }
+ return base
+ }
+
+ private fun dominantRadarBucket(ex: com.ironlog.app.ui.model.HistoryExercise): String {
+ val t = (listOfNotNull(ex.primaryMuscle) + ex.primaryMuscles +
+ listOf(ex.name, ex.category.orEmpty())).joinToString(" ").lowercase()
+ return when {
+ t.contains("chest") || t.contains("pec") -> "Chest"
+ t.contains("back") || t.contains("lat") || t.contains("row") -> "Back"
+ t.contains("shoulder") || t.contains("delt") -> "Shoulders"
+ t.contains("bicep") || t.contains("tricep") || t.contains("curl") -> "Arms"
+ t.contains("quad") || t.contains("hamstring") || t.contains("glute") ||
+ t.contains("calf") || t.contains("leg") || t.contains("squat") ||
+ t.contains("deadlift") -> "Legs"
+ else -> "Core"
+ }
+ }
+
+ // ── Movement balance ──────────────────────────────────────────────────────
+
+ /** Push = Chest + Shoulders, Pull = Back, Legs = Legs. Arms / Core excluded from ratio. */
+ private fun movementBalance(byGroup: Map): Map {
+ val push = (byGroup["Chest"] ?: 0) + (byGroup["Shoulders"] ?: 0)
+ val pull = byGroup["Back"] ?: 0
+ val legs = byGroup["Legs"] ?: 0
+ val total = max(1, push + pull + legs)
+ return linkedMapOf(
+ "Push" to ((push * 100f) / total).toInt(),
+ "Pull" to ((pull * 100f) / total).toInt(),
+ "Legs" to ((legs * 100f) / total).toInt(),
+ )
+ }
+
+ // ── PR velocity ───────────────────────────────────────────────────────────
+
+ /**
+ * Counts PR sessions in the last 30 and previous 30-60 days by tracking
+ * running e1rm (Epley formula) per exercise across chronologically sorted history.
+ */
+ private fun computePrVelocity(history: List): Triple {
+ val sorted = history.sortedBy { it.date } // oldest first
+ val runningBest = mutableMapOf() // exercise key → best e1rm
+ var prLast30 = 0
+ var prPrev30 = 0
+ sorted.forEach { session ->
+ val age = ageDays(session.date)
+ var sessionIsPr = false
+ session.exercises.forEach { ex ->
+ val key = ex.exerciseId.ifBlank { ex.name }
+ val maxE1rm = ex.sets
+ .filter { it.type != "warmup" }
+ .maxOfOrNull { s ->
+ val w = s.weight; val r = s.reps
+ if (w > 0 && r > 0) w * (1.0 + r / 30.0) else 0.0
+ } ?: 0.0
+ if (maxE1rm > 0.0) {
+ val prev = runningBest[key] ?: 0.0
+ if (maxE1rm > prev) {
+ runningBest[key] = maxE1rm
+ sessionIsPr = true
+ }
+ }
+ }
+ if (sessionIsPr) when {
+ age <= 30L -> prLast30++
+ age <= 60L -> prPrev30++
+ }
+ }
+ val trend = when {
+ prLast30 > prPrev30 -> "accelerating"
+ prLast30 < prPrev30 -> "slowing"
+ else -> "steady"
+ }
+ return Triple(prLast30, prPrev30, trend)
+ }
+
+ // ── Neural fatigue ────────────────────────────────────────────────────────
+
+ /**
+ * Checks for consecutive calendar days with heavy compound work in the last 14 days.
+ * Flagged when consecutive_days >= 3.
+ */
+ private fun computeNeuralFatigue(history: List): NeuralFatigueResult {
+ val heavyDays = history
+ .filter { ageDays(it.date) <= 14 }
+ .filter { session ->
+ session.exercises.any { ex ->
+ val lower = ex.name.lowercase()
+ HEAVY_COMPOUNDS.any { lower.contains(it) } &&
+ ex.sets.any { it.type != "warmup" && it.weight > 0 }
+ }
+ }
+ .sortedByDescending { it.date } // most recent first
+
+ var consecutive = 0
+ var prev: LocalDate? = null
+ val lastHeavyEx = mutableListOf()
+
+ for (session in heavyDays) {
+ val day = parseHistoryInstant(session.date)?.atZone(ZoneId.systemDefault())?.toLocalDate() ?: break
+ val gap = if (prev == null) 0L else ChronoUnit.DAYS.between(day, prev)
+ if (prev == null || gap == 1L) {
+ consecutive++
+ session.exercises
+ .filter { ex -> HEAVY_COMPOUNDS.any { ex.name.lowercase().contains(it) } }
+ .forEach { if (lastHeavyEx.size < 3 && it.name !in lastHeavyEx) lastHeavyEx += it.name }
+ prev = day
+ } else {
+ break
+ }
+ }
+ return NeuralFatigueResult(
+ isFlagged = consecutive >= 3,
+ consecutiveDays = consecutive,
+ lastHeavyExercises = lastHeavyEx,
+ )
+ }
+
+ // ── Best performance window ───────────────────────────────────────────────
+
+ private fun bestPerformanceWindow(history: List): String {
+ val buckets = linkedMapOf(
+ "Morning" to mutableListOf(),
+ "Afternoon" to mutableListOf(),
+ "Evening" to mutableListOf(),
+ "Night" to mutableListOf(),
+ )
+ history.forEach { w ->
+ val hour = parseHistoryInstant(w.date)?.atZone(ZoneId.systemDefault())?.hour ?: return@forEach
+ val b = when (hour) {
+ in 5..11 -> "Morning"; in 12..16 -> "Afternoon"
+ in 17..20 -> "Evening"; else -> "Night"
+ }
+ buckets[b]?.add(w.volume)
+ }
+ val best = buckets.maxByOrNull { (_, v) -> if (v.isEmpty()) 0.0 else v.average() }?.key ?: "Morning"
+ return "$best has the highest average session volume."
+ }
+
+ // ── Training age ──────────────────────────────────────────────────────────
+
+ private fun computeTrainingAge(history: List): Triple {
+ if (history.isEmpty()) return Triple(
+ 0.0, "Beginner", "Track your first workout to start measuring progress."
+ )
+ val oldest = history.minByOrNull { it.date }
+ ?: return Triple(0.0, "Beginner", "")
+ val oldestDate = parseHistoryInstant(oldest.date)?.atZone(ZoneId.systemDefault())?.toLocalDate()
+ ?: return Triple(0.0, "Beginner", "")
+ val months = ChronoUnit.MONTHS.between(oldestDate, LocalDate.now()).coerceAtLeast(1)
+ val years = months / 12.0
+
+ // Estimate monthly e1rm progression from compound sets
+ val compoundKeywords = setOf("bench", "squat", "deadlift", "press", "row")
+ fun sessionAvgE1rm(s: HistoryEntry) = s.exercises
+ .filter { ex -> compoundKeywords.any { ex.name.lowercase().contains(it) } }
+ .flatMap { ex ->
+ ex.sets.filter { it.type != "warmup" }.mapNotNull { set ->
+ val w = set.weight; val r = set.reps
+ if (w > 0 && r > 0) w * (1.0 + r / 30.0) else null
+ }
+ }.average().takeIf { it.isFinite() }
+
+ val compoundSessions = history
+ .sortedBy { it.date }
+ .filter { sessionAvgE1rm(it) != null }
+
+ val monthlyProgression: Double = if (compoundSessions.size >= 8) {
+ val avgFirst = compoundSessions.take(4).mapNotNull { sessionAvgE1rm(it) }.average()
+ val avgLast = compoundSessions.takeLast(4).mapNotNull { sessionAvgE1rm(it) }.average()
+ ((avgLast - avgFirst) / months).takeIf { it.isFinite() } ?: 0.0
+ } else {
+ if (months < 6) 5.0 else 1.0
+ }
+
+ val (label, tip) = when {
+ monthlyProgression > 3.0 || months < 6 ->
+ "Beginner" to "Linear progression works best — add weight to each session."
+ monthlyProgression < 0.5 && months > 18 ->
+ "Advanced" to "Periodization matters — vary intensity and volume week to week."
+ months > 36 ->
+ "Elite" to "Consistency and injury prevention are your highest priorities."
+ else ->
+ "Intermediate" to "Block periodization: focus one quality per cycle (strength, volume, peak)."
+ }
+ return Triple(years, label, tip)
+ }
+
+ // ── Shared helpers ────────────────────────────────────────────────────────
+
+ private fun ageDays(iso: String): Long {
+ val d = parseHistoryInstant(iso)?.atZone(ZoneId.systemDefault())?.toLocalDate()
+ ?: return Long.MAX_VALUE
+ return ChronoUnit.DAYS.between(d, LocalDate.now())
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/VolumeInterpretationEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/VolumeInterpretationEngine.kt
new file mode 100644
index 0000000..6533d32
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/VolumeInterpretationEngine.kt
@@ -0,0 +1,39 @@
+package com.ironlog.app.domain.intelligence
+
+object VolumeInterpretationEngine {
+
+ /**
+ * Generates a one-line insight string from pre-computed volume landmarks.
+ * Prefers muscles that are out of range (low/high) first, then summarises the rest.
+ */
+ fun buildMuscleInsight(volumeLandmarks: Map): String {
+ if (volumeLandmarks.isEmpty()) return "Log workouts to see volume interpretation."
+
+ // Muscles outside optimal range first
+ val outOfRange = volumeLandmarks.filter { it.value.status != "optimal" }
+ val optimal = volumeLandmarks.filter { it.value.status == "optimal" }
+
+ val parts = mutableListOf()
+ outOfRange.forEach { (muscle, lm) ->
+ val verb = if (lm.status == "low") "below MEV" else "above MRV"
+ parts += "$muscle is $verb (${lm.sets} sets)"
+ }
+ when {
+ optimal.size == volumeLandmarks.size ->
+ parts += "All groups are in optimal range"
+ optimal.isNotEmpty() ->
+ parts += "${optimal.keys.joinToString(", ")} ${if (optimal.size == 1) "is" else "are"} optimal"
+ }
+ return parts.joinToString(". ").trimEnd('.') + "."
+ }
+
+ /**
+ * Legacy overload — accepts a raw set-count map and derives status using
+ * TrainingIntelligenceEngine's landmark thresholds. Kept for backward compatibility.
+ */
+ @JvmName("buildMuscleInsightFromSets")
+ fun buildMuscleInsight(volumeByMuscle: Map): String {
+ val landmarks = TrainingIntelligenceEngine.buildLandmarks(volumeByMuscle)
+ return buildMuscleInsight(landmarks)
+ }
+}
diff --git a/app/src/main/java/com/ironlog/app/domain/intelligence/WorkoutSuggestionEngine.kt b/app/src/main/java/com/ironlog/app/domain/intelligence/WorkoutSuggestionEngine.kt
new file mode 100644
index 0000000..37558f3
--- /dev/null
+++ b/app/src/main/java/com/ironlog/app/domain/intelligence/WorkoutSuggestionEngine.kt
@@ -0,0 +1,69 @@
+package com.ironlog.app.domain.intelligence
+
+/**
+ * Maps plan days to muscle-group readiness scores and recommends the best
+ * day to train based on recovery state from [RecoveryReadinessEngine].
+ */
+class WorkoutSuggestionEngine {
+
+ // keyword → region mapping (lowercase keywords for case-insensitive matching).
+ // Order matters: checked top-to-bottom via firstOrNull.
+ // Shoulders is placed before Pull so "lateral raise" matches "lateral raise" before "lat".
+ private val regionKeywords: Map> = mapOf(
+ "Push" to listOf("bench", "press", "dip", "push", "fly", "flye", "chest", "tricep"),
+ "Shoulders" to listOf("lateral raise", "front raise", "face pull", "upright row", "shoulder", "overhead", "ohp"),
+ "Pull" to listOf("row", "pull", "lat", "deadlift", "shrug", "bicep", "chin"),
+ "Legs" to listOf("squat", "leg", "lunge", "calf", "glute", "hip thrust", "rdl", "hamstring", "quad"),
+ "Core" to listOf("plank", "crunch", "ab", "oblique", "core", "sit-up", "situp", "hollow"),
+ "Arms" to listOf("curl", "extension", "forearm", "wrist"),
+ )
+
+ /**
+ * Returns the training region for [exerciseName] using keyword matching,
+ * or null if no region matches.
+ */
+ fun regionForExercise(exerciseName: String): String? {
+ val lower = exerciseName.lowercase()
+ return regionKeywords.entries.firstOrNull { (_, keywords) ->
+ keywords.any { kw -> lower.contains(kw) }
+ }?.key
+ }
+
+ /**
+ * Scores a plan day against [readiness] (0.0 = fully fatigued, 1.0 = fully recovered).
+ * Returns 0.5 (neutral) if none of the exercises map to a known region.
+ */
+ fun scoreDay(readiness: Map, exerciseNames: List